Date post: | 15-Oct-2015 |
Category: |
Documents |
Upload: | valeriu-marius-nitu |
View: | 1 times |
Download: | 0 times |
Elementele de baz ale limbajului
Obiective:
- alfabetul limbajului, identificatori, constante
- formatul general al unei instruciuni
- variabile
- directive de generare a datelor
- alte directive: LABEL, EQU, =, RADIX, END, EVEN, ORG
3.1. Alfabetul limbajului3.1. Alfabetul limbajului
Mulimea de semne denumite simboluri care formeaz alfabetul limbajului este compusdin:- literele mici si mari ale alfabetului englez- cifrele zecimale ale sistemului de cifre arabe; 0,1,2,3,4,5,6,7,8,9.- caractere speciale( de punctuaie): . , : ; ? ( ) _ - + / * etc.Asamblorul nu face distincie ntre literele mici i literele mari.
Identificatori
Identificatorii sunt secvene de cel mult 31 caractere alfanumerice (litere i/sau cifre) iunele caractere speciale (de exemplu liniua de subliniere) cu condiia ca acestea sa nceap cu oliter sau cu un caracter special din categoria celor acceptate n formarea unui identificator.
Identificatorii sunt de doua tipuri: predefinii i definii de utilizator.Identificatorii standard sau predefinii sunt cuvinte cheie utilizai pentru:- nume de registre: ax, al, ah, eax, ds, fs, di, cs, sp, etc.- nume de operatori: dup, seg, ptr, type, etc.- nume de instruciuni: add, mov, xchg, dec, movs, etc- nume de directive: db, dw, radix, org, assume, model, title, public, extrn, etc.Identificatorii definii de utilizator se folosesc pentru:- nume de variabile, operanzi, locaii de memorie, etichete- nume de variabile, operanzi, locaii de memorie, etichete- nume de proceduri, structuri, segmente, macroinstruciuni.
Constante
Constantele sunt valori fixe care nu pot fi modificate n timpul execuiei programului.Constantele pot fi numerice sau iruri de caractere, formate dup anumite reguli, crora li seasociaz o valoare. Constantele numerice pot fi: ntregi sau reale. Constantele ntregi reprezintnumerele ntregi reprezentate n zecimal, binar, octal sau hexazecimal. O constant ntreag estereprezentat n binar dac apare cu prefixul B, n octal dac este prefixat de litera O, nhexazecimal dac este prefixat de litera H sau n zecimal dac este sau nu prefixat de litera D.De exemplu:
- constanta 101101B este reprezentat n binar;- constanta 1276O este reprezentat n octal;- constantele 1473h, 0d3a4H sunt reprezentate n hexazecimal;- constantele 1473, 1436 sunt reprezentate n zecimalObservaie. Pentru a evita confuzia ntre constantele hexazecimale care ncep cu una dinObservaie. Pentru a evita confuzia ntre constantele hexazecimale care ncep cu una din
cifrele hexazecimale A, B,C, D, E, F i identificatori, o asemenea constant hexazecimal vancepe cu cifra zero.
Utiliznd directiva RADIX se poate impune reprezentarea implicit a constantelor ntr-oanumit baz. De exemplu:
.RADIX 2
mov bx, 10 ; (ax)=0002h
.RADIX 8
mov bx, 10 ; (ax)=0008h
.RADIX 10
mov bx, 10 ; (ax)=000ah
.RADIX 16
mov bx, 10 ; (ax)=0010h
Reprezentarea constantelor ntregi se pot face pe octet (8 bii) cuvnt (16 bii), dublu cuvnt (32bii ) sau pe 64 bii.
Constantele ntregi pot fi codificate n BCD mpachetat sau nempachetat. Constantele zecimalecodificate binar mpachetat pot fi definite cu directiva dt pe 10 octei .
Constantele reale sunt reprezentate n virgul mobil pe 32, 64 sau 80 bii, dup tipul constantei:dd, dq, respectiv dt.
irurile de caractere constau dintr-o succesiune de caractere incluse ntre apostrofuri. Daccaracterul apostrof face parte din ir se dubleaz. De exemplu, daca irul de caractere este: azi21.012005 se va scrie azi 21.012004.21.012005 se va scrie azi 21.012004.
Formatul general al unei instruciuni
Formatul general al unei instruciuni este urmtorul:
: ;
unde:a) Cmpul : este opional i poate conine o etichet care este nume simbolic, unidentificator cruia i se asociaz o valoare egal cu adresa primului octet al instruciunii. Prezenaacestui cmp este opionala. Dac acest cmp nu exist, nu se mai folosete caracterul delimitator:b) Cmpul . Mnemonica este un ir de litere ce identific instruciunearespectiv, sau clase de instruciuni creia aparine aceasta i reprezint numele instruciunii saurespectiv, sau clase de instruciuni creia aparine aceasta i reprezint numele instruciunii saudirectivei. Acest cmp este obligatoriu. De exemplu: MOV, INC, DEC, ADD.c) Cmpul . Prezena i formatul acestui cmp depinde de tipul instruciunii. Acestcmp poate lipsi, sau poate conine 1 operand sau 2 operanzi separai prin caracterul , (virgul).Cnd exist 2 operanzi, primul este destinaia i al doilea surs. Operanzii pot fi i expresii ceconin nume de registre, constante, identificatori i operatori.d) Cmpul . Prezena acestui cmp este opionala. Daca lipsete, caracterul ;este opional, astfel prezena acestuia este obligatorie. Acest cmp poate conine un mesajreferitor la metoda folosit, instruciunea n cauz etc. Dac o linie este de comentariu aceasta vancepe cu caracterul punct i virgul.
Variabila este un nume simbolic, identificator asociat cu adresa primului octet al unei date.Introducerea variabilelor n program se face utiliznd directive de generare de date aleasamblorului ce in locul declaraiilor de variabile ntlnite n programarea n limbaje de nivelnalt.
Directivele de generare si rezervare de date sunt:- db (define byte), definete date de tip octet cu sau fr semn- dw (define word), definete date pe 2 octei ce pot fi ntregi cu sau fr semn sau adrese
efective- dd (define double word) definete pe 4 octei valori ntregi sau reale cu sau fr semn sau o
3.4. Variabile
- dd (define double word) definete pe 4 octei valori ntregi sau reale cu sau fr semn sau oadres fizic
- dq (define quadword) definete pe 8 octei o valoare ntreag sau real cu sau fr semn- dt (define ten bytes) definete pe 10 octei o valoare real sau o valoare zecimal
mpachetat- df (define float) definete o valoare real pe 6 octei;- dp (define pointer) referina specific pentru 386, reprezentat pe 6 octei( segmentul pe 2
octei iar offset-ul pe 4 octei)
Definirea si referirea etichetelor
Etichetele sunt identificatori (iruri de caractere) care permit identificarea unor locaii dememorie, care pot fi locaii ale instruciunilor, operanzilor sau ale unor proceduri. Etichetele unorinstruciuni sau proceduri au trei atribuite: segment, offse (deplasament ) i poziionare (near saufar ), iar pentru operanzi au atributul tip ( byte, word, dword, etc.)
Exemple
alfa: add ax,cx
cauta proc near
calcule proc farcalcule proc far
. Directive de generare a datelor
n limbajele de asamblare 80x86 se poate opera cu anumite tipuri de date, recunoscutede procesor, acesta dispunnd de directive (pseudoinstruciuni) specifice pentru definirea lor.
a)Byte(octet).
Acest tip de date ocupa 8 bii, adic un octet(byte). Informaia dintr-un octet poate fi: unntreg fr semn cuprins intre 0 si 225, un ntreg cu semn cuprins intre 128 si 127, sau uncaracter ASCII.
Definirea datelor de tip byte se face cu ajutorul directivei DB (Define Byte) care aresintaxa:
[variabila] DB lista expresii[variabila] DB lista expresii
unde- variabila, opionala, este un identificator asociat adresei efective a primului octet de
memorie generat, corespunztor primei expresii din lista de expresii- lista-expresii cuprinde expresii constante (calculabile n momentul asamblrii) i separate
prin virgul.Fie directivele:
alfa DB 65, 72h, 75o, 11011b, 15+22h, oachDB -65, 'a', 'abc'
n memorie ncepnd de la adresa simbolica alfa, se va genera secvena de octei,reprezentat n hexazecimal:
41 72 3d 1b 31 ac bf 61 61 62 63
alfa +0 +1 +2 +3 +4Valoarea binar 11011b va fi generat la adresa alfa + 3.
b)WORD (cuvnt).
Un cuvnt ocup doi octei (16 bii) i poate fi reprezentat ntr-un registru de 16 bii sau n 2octei consecutivi de memorie. Numerotarea biilor n cadrul unui cuvnt se face de la 0 la 15(bitul 15 e bitul cel mai semnificativ al cuvntului, iar bitul 0 este bitul cel mai puin(bitul 15 e bitul cel mai semnificativ al cuvntului, iar bitul 0 este bitul cel mai puinsemnificativ), numerotarea se face de la dreapta la stnga:
Informaia memorat ntr-un cuvnt poate fi:- un ntreg pe 16 bii cu semn (bitul 15 este bitul de semn), cuprins intre -215 si 215 1,- un ntreg pe 16 bii fr semn, cuprins intre 0 si 216 1- sau o adres de memorie de 16 bii.
Reprezentarea celor 2 octei ai cuvntului n memorie se face astfel nct octetul celmai puin semnificativ este memorat la adresa cea mai mic. De exemplu: dac valoarea 2345heste memorat la adresa 2000h, atunci octetul 45h se va afla la adresa 2000h, iar octetul 23h laadresa 2001h.
Generarea datelor de tip cuvnt se poate face folosind directiva de tip DW(DefineWord), a crei sintax este:
[variabila] DW lista de expresii
unde:- variabila, opionala, este un identificator asociat adresei efective a primului cuvnt de
memorie generat, corespunztor primei expresii din lista de expresii.- lista de expresii este o list de expresii constante separate prin virgula.Fie secvena de directive:
beta DW 4567h, 0bc4ah, 1110111011b, 2476oDW -7683, 7683, 'ab'
In memorie de la adresa beta se vor genera octeii:
67 45 4a bc bb 03 3e 05 fd e1 03 e1 62 61
beta +2 +4 +6 +8 +10 +12 +14Constanta octal 2476o este generat de la adresa beta +6.
c) Double WORD (dublu cuvnt)Un dublu cuvnt ocup 2 cuvinte sau 4 octei (32 bii) i poate fi reprezentat n memorie pe
4 octei consecutivi, ntr-o pereche de registre de 16 bii sau intr-un registru de 32 bii (laprocesoarele de 32 bii).
Informaia memorat ntr-un dublu cuvnt poate fi:- un ntreg pe 32 bii, cu sau fr semn;- un numr real n simpl precizie;- sau o adres fizic de memorie de 32 bii.
Generarea datelor de tip dublu cuvnt se poate face folosind directiva DD (DefineDouble Word), a crei sintax este:
[variabila] DD lista expresii
unde:unde:- variabila, opional, este un identificator asociat adresei efective primului dublu cuvnt de
memorie generat corespunztor primei expresii din lista de expresii;- lista de expresii este o list de expresii constante separate prin virgul.
Reprezentarea celor dou cuvinte a unui dublu cuvnt de memorie se face astfel nctcuvntul cel mai puin semnificativ este memorat la adresa cea mai mic. De exemplu, dublulcuvnt 12345678 h, aflat la adresa 2000h se memoreaz astfel: cuvntul 5678h se memoreaz laadresa 2000h, iar cuvntul 1234h la adresa 2002h, adic adresa de segment este memorat laadrese mari, iar deplasamentul (offsetul) la adrese mici.
Secvena de directive :gama DD 12345678h, 1, -1DD 1.0, -1.0
DD gamapresupunnd ca memorarea se face de la adresa 4512:3467 va conduce la generarea
urmtoarei secvene de octei:
78 56 34 12 01 00 00 00 ff ff ff ff 00 00 80 3f
gama +4 +8 +12 +16
00 00 80 Bf 67 34 12 45
gama+16 +20
Constanta reala -1.0 se asambleaz la adresa gama + 16.
d)QUAD WORD (8 octei)
Tipul Quad word (qword) ocup 8 octei i este reprezentat n memorie pe 64 bii sau ntr-o pereche de registre de 32 bii (in cazul procesoarelor de 32 bii).
Informaia stocat ntr-un qword poate fi: un ntreg cu sau fr semn pe 64 bii, sau unnumr real in dubl precizie.
Generarea unor date de tip qword se face cu ajutorul directivei DQ (Define Quad word), a crei sintaxa este:
[variabila] DQ lista de expresii
unde:- variabila, opionala, este un identificator asociat adresei efective primului qword de
memorie generat corespunztor primei expresii din lista de expresii;memorie generat corespunztor primei expresii din lista de expresii;- lista de expresii este o list de expresii constante separate prin virgul.
Reprezentarea n memorie a celor 8 octei ai unui qword se face astfel ncit octetul celmai puin semnificativ este memorat la adresa cea mai mic.
Fie secvena :q DQ 2, -2, 2.5, -2.5
care va fi reprezentat n memorie astfel:
02 00 00 00 00 00 00 00 fe ff ff ff ff ff ff ff
00 00 00 00 00 00 04 40 00 00 00 00 00 00 04 c0
q +8 +16
+16 +24
Valoarea reala -2.5 este asamblat de la adresa q+24.
e)Ten Bytes
Valorile Ten byte (tbyte) ocup 10 octei consecutivi de memorie, sau unul dinregistrele coprocesorului matematic.
Informaia stocat ntr-un tbyte poate fi: un numr ntreg reprezentat ca o secvena decifre BCD (format mpachetat) cu semn sau un numr real n precizie extins.
Generarea unor date de tip tbyte se face cu directiva DT (Define Ten Bytes) a crei format este:
[variabila] DT lista de expresii
unde:- variabila, opionala, este un identificator asociat adresei efective primului tbyte de memoriegenerat corespunztor primei expresii din lista de expresii;- lista de expresii este o list de expresii constante separate prin virgul.
n format BCD mpachetat fiecare cifr zecimal se reprezint pe o tetrad (4 bii),deci 2 cifre BCD pe octet. Un ntreg BCD se poate reprezenta cu maxim 19 cifre zecimale, carear ocupa 76 bii. Ultima tetrad aflata la adresa cea mai mare este destinat memorri semnului.Semnul se memoreaz doar n bitul cel mai semnificativ al numrului, deci urmtorii 3 bii aitetradei ce conine semnul pot fi bii ai numrului. Astfel ntregii BCD pot fi cuprini ntre:tetradei ce conine semnul pot fi bii ai numrului. Astfel ntregii BCD pot fi cuprini ntre:
-79999 99999 99999 99999i
+79999 99999 99999 99999cifra cea mai semnificativ fiind reprezentat doar pe 3 bii.
Directiva:tb DT 45671234567890123456, -45671234567890123456
va conduce la generarea urmtoarei secvene de octei:
56 34 12 90 78 56 34 12 67 45 56 34 12 90 78 56 34 12 67 c5
tb +10
Pentru exemplificarea utilizrii directivelor de generare de date, considerm urmtorul program:
model small
. stack 100h
data segment
alfa db 40+25,72h,75o,11011b,15+22h
db 0ach,-65,'a','abc'db 0ach,-65,'a','abc'
beta dw 4567h,0bc4ah,1110111011b,2476o
dw -7683,7683,'ab'
gama dd 12345678h,1,-1
dd 1.0,-1.0,-.23828125,0.0390625
gama1 dd gama
qw dq 2,-2,2.5,-2.5
t1 dt 8888888888777777777,-5555555555555555555
tb dt 45671234567890123456,-45671234567890123456
f dt 3345,-3345,1.0,-1.0
data ends
cod segment
assume cs:cod, ds:data
start: mov ax,data
mov ds,ax
cod ends
end start
Fiierul listing obinut (.lst) dup asamblare arat astfel:
Turbo Assembler Version 3.2 02/06/00 18:21:40 Page 1tipur. ASM
1 0000 .model small
2 0000 .stack 100h2 0000 .stack 100h
3 0000 data segment
4 0000 41 72 3D 1B 31 alfa db
40+25,72h,75o,11011b,15+22h
5 0005 AC BF 61 61 62 63 db 0ach,
-65,'a','abc'
6 000B 4567 BC4A 03BB 053E beta dw
4567h,0bc4ah,1110111011b,2476o
7 0013 E1FD 1E03 6162 dw -7683,7683,'ab'
8 0019 12345678 00000001+ gama dd
12345678h,1,-1
9 FFFFFFFF
10 0025 3F800000 BF800000+ dd 1.0,-
1.0,-.23828125,
0.0390625
11 BE740000 3D200000
12 0035 00000019sr gama1 dd
gama
13 0039 0000000000000002 + qw dq 2,-
2,2.5,-2.5
14 FFFFFFFFFFFFFFFE +
15 4004000000000000 +
16 C004000000000000
17 0059 08888888888777777777+ t1 dt
8888888888777777777,8888888888777777777,
-5555555555555555555
185555555555555555
19006D 45671234567890123456+ tbdt 45671234567890123456,
-45671234567890123456
20 C5671234567890123456
21 0081 00000000000000003345+ f dt 3345,-
3345,1.0,-1.0
22 80000000000000003345+
23 3FFF8000000000000000+
24 BFFF8000000000000000
25 00A9 data ends
26
27 0000 cod segment
28 assume
cs:cod, ds:data
29 0000 B8 0000s start: mov ax,data
30 0003 8E D8 mov ds,ax
31 0005 cod ends
32 end start
Prima coloan reprezint numrul liniei din fiierul .lst. Coloana urmtoare reprezint adresarelativ la coninutul registrului ds, adresa exprimat n hexazecimal pe 4 cifre hexa. Urmeazapoi coninutul cmpului de date corespunztor unei linii. Dac se continu pe linia urmtoare vaaparea semnul +. Valorile ntregi, negative se reprezint in complement fa de doi, iar cele realesunt reprezentate n virgul mobil.
Prezena caracterelor r i s n aceast zon indic faptul c este vorba despre o adres desegment 0000h i deplasamentul 0015h, adic adresa relativ a variabilei gama.
La ntregii BCD de la variabilele t1, tb se poate observa semnul (bitul de semn).In fiierul .lst nu apare poziia fizic a octeilor n memorie. Zona de memorie
corespunztoare modulului de date de mai sus arat astfel:
ds:0000 41 72 3D 1B 31 AC BF 61ds:0008 61 62 63 67 45 4A BC BBds:0010 03 3E 05 FD E1 03 1E 62ds:0018 61 78 56 34 12 01 00 00ds:0020 00 FF FF FF FF 00 00 80ds:0028 3F 00 00 80 BF 00 00 74ds:0030 BE 00 00 20 3D 19 00 B0ds:0038 5A 02 00 00 00 00 00 00ds:0040 00 FF FF FF FF FF FF FFds:0048 FF 00 00 00 00 00 00 04ds:0050 40 00 00 00 00 00 00 04ds:0058 C0 77 77 77 77 77 87 85ds:0060 88 88 08 55 55 55 55 55ds:0060 88 88 08 55 55 55 55 55ds:0068 55 55 55 55 85 56 34 12ds:0070 90 78 56 34 12 67 45 56ds:0078 34 12 90 78 56 34 12 67ds:0080 C5 45 33 00 00 00 00 00ds:0088 00 00 00 45 33 00 00 00ds:0090 00 00 00 00 80 00 00 00ds:0098 00 00 00 00 80 FF 3F 00ds:00A0 00 00 00 00 00 00 80 FFds:00A8 BF 00 00 00 00 00 00 00
Prima coloana reprezint adresa fizic de memorie sub forma ds:xxx unde ds este registrulsegment de date, iar xxxxh reprezint ofsetul, adresa relativ din segmentul coninut n ds. ncontinuare pe fiecare linie apar 8 octei de memorie.
Valoarea ntreag alfa = 65 = 40 + 25 = 4116 reprezentat pe un octet prin 41h se afl laadresa ds: 0000, iar 75o la adresa ds: 0002 sau alfa +2.
Cuvntul 4567h, aflat la adresa simbolic beta ocupa doi octei de la adresa ds: 000A astfel6745. Dublul cuvnt 0.0390625 se afl la adresa ds: 0025.
Adresa variabilei gama din declaraia gama1 dd gama apare aici n forma:5AB0:0019, unde 5AB0 este adresa de segment coninut n ds, iar 0019 este offsetul lui gama.
3.6. Alte directive
Directiva LABEL
Pentru a nlesni accesarea aceleai variabile, utiliznd dou tipuri de date diferite se poate utilizadirectiva LABEL a crei sintax este:
LABEL
unde variabila este numele unei variabile de tip < tip >, iar tip este un specificator de tip: BYTE,WORD, DWORD, etc.De exemplu secvena de declaraii:
alfa label byte
beta dw 10 dup( 4,-5)
Va atribui ambelor variabile alfa, respectiv beta acelai prim octet din cei 40 generai,dar alfa va desemna o variabil de tip byte iar beta o variabil de tip word (cuvnt).
Directiva EQU
- asigneaz rezultatul evalurii unei expresii ntregi, un simbol predefinit, definit anterior sau uncuvnt cheie al asamblrii unui nume simbolic.- Asamblorul va nlocui numele simbolic cu valoarea asignat. Forma general a directivei:
variabila equ expresievariabila equ expresieunde;- variabila este numele simbolic (identificator) asignat valorii expresiei;- expresie este o expresie a crei valoare se asigneaz numelui simbolic.
Exemplu:-----------------------
sir dw asamblare, 75, 20, 03
n equ ($ - sie)/type sir ; determina numarul de
cuvinte
l1 equ 25 * 6ah 125o
aduna equ add
baza equ [bp + 4}
.
mov ax,n
aduna ax,l1
Valorile ntregi se asigneaz pe cuvnt. Valoarea asignat nu poate fi modificat prin programValorile ntregi se asigneaz pe cuvnt. Valoarea asignat nu poate fi modificat prin program(la fel ca declaraia CONST din Pascal).
Directiva = (egal)
- asigneaz rezultatul evalurii unei expresii ntregi, un simbol definit n amonte sau predefinitsau un simbol al limbajului de asamblarea unui nume simbolic.
Spre deosebire de directiva EQU, unde valoarea asignat numelui simbolic nu poate fischimbat, n cazul directivei = valoarea asignat poate fi modificat n cadrul programului.
Sintaxa directivei:variabila = expresie
unde:- variabila este numele simbolic asignat valorii expresiei;- expresie este o expresie a crei valoare se asigneaz numelui simbolic (variabilei);Exemplu:
---------------------------
a = 25
..
a = a + 7 ; noua valoare a = 32
Directiva .RADIX
- permite schimbarea bazei de numeraie n orice alt baz cuprins ntre baza 2 , 8 , 10 si 16.Sintaxa directivei:. radix expresie
unde - expresie este noua baza de numeraie, considerat ntotdeauna n zecimal.
Exemplu:. radix 8
a dw 12 ; valoarea 12 generata este octal
. radix 10
b dw 25 ;valoarea 25 este considerata in
zecimal
Directiva END
Directiva END indic sfritul unei secvene de program. Forma general este:
END END
Eticheta apare numai n cazul indicrii sfritului programului principal i este asociat punctuluide ncepere al programului. Adresa asociat acestei etichete este adresa la care face saltncrctorul, dup ce programul a fost ncrcat n memorie spre a fi executat.
Exemplul 1:cod segment
start: mov ax,data
mon ds,ax
.
mov ax,4c00h
int 21h
cod ends
end start
Eticheta start indic prima instruciune din program ce trebuie executat.
Exemplul 2. Cazul in care avem mai multe segmente de program
cod1 segment
.
cod1 ends
end
codp segment
.
begin:
.
codp ends
end beginend begin
Directiva EVEN
Directiva EVEN face ca adresa urmtorului octet s fie par. Datele generate pe cuvnt pot fialiniate sau nu. n cazul n care sunt aliniate (se afl la adrese pare) sunt executate ntr-un singurciclu magistral.
Exemplu:
alfa db 75
beta dw -675, 898, 56aeh
Cuvintele generate de la adresa beta ncep de la adrese impare, adic nu sunt aliniate. Pentrualinierea acestora se va folosi directiva EVEN.
alfa db 75
even
beta dw -675, 898, 56aeh
Directiva ORG
Directiva ORG permite alinierea codului generat. Forma generala a directivei este:
ORG
Unde expresie-constant este o expresie ce se poate evalua n timpul asamblrii. Directiva face caurmtorul octet generat sa fie n poziia n+1 de la nceputul segmentului, unde n este valoareaexpresiei ce apare n directiv.
Exemplu:
xyz segment
org 10
alfa dw 0a3d4fh
org 30
beta dw 567o
..
xyz ends
Trebuie avut grij ca prin aceste alinieri s nu fie suprapuse anumite date.
3.7. Operatori
Operatorul DUP
Operatorul DUP permite generarea multipl a listei de expresii constante ce apar ntre parantezedup cuvntul DUP. Forma general a acestui operator este
DUP ( )
unde:- expresie_constant indic numrul de multiplicri- list_expresii_constante este o list de expresii care va fi multiplicat.Pentru a rezerva octei, cuvinte, dublu cuvinte etc. fr a fi iniializate se folosete caracterul ?.Operatorul DUP apare intr-o directiva de generare de date.Exemplu:Directivele:
alfa db 56h, 2 dup( 0,1,?)
beta dw 2 dup(?), 2 dup(0, 2 dup(1111h,2222h))
determina rezervarea i generarea urmtorilor octei de la adresa alfa:
56 00 01 00 0156 00 01 00 01
00 00 11 11 22 22 11 11 22 22 00 00 11 11 22 22
si a urmtoarelor cuvinte de la adresa beta:
Operatori aritmetici
Operatorii aritmetici acioneaz asupra unor operanzi ntregi i returneaz o valoare rezultat nurma evalurii. Operatorii aritmetici sunt +, -, *, /, mod (restul mpririi ntregi). Operaiilearitmetice se fac in ordinea scrierii lor.Exemplu:
--------------------------
alfa db 7-4/3
beta db 12-14/(33-4)*5
w db 15 12 * 8 mod 3 ;
Operatori logiciOperatori logici
- acioneaz asupra biilor valorii unei/unor expresii.
Operatorul NOT
- inverseaz valoarea biilor unei expresii. Tabela de adevr pentru operatorul not este:
bit not bit---------------1 00 1
i are ca efect inversarea tuturor biilor egali cu 1 in 0 si inversarea biilor 0 cu 1.
Forma general:not expresie
unde - expresie este orice expresie corect definit.
Exemplu:.
.
l1 equ 5 .
alfa db not 75
beta db not((7-6)/3+8*4)
----------------------------
mov ax, not l1
----------------------------
Operatorul AND
- realizeaz Si logic bit cu bit ntre valorile a doua expresii. Tabela de adevrcorespunztoare operatorului and este:
x | y | x and y---|---|----------0 | 0 | 00 | 1 | 01 | 0 | 01 | 1 | 1Operatorul and va returna 1 in fiecare poziie a rezultatului dac biii corespunztori din cele
2 expresii sunt egali cu 1. Forma general este:
expresie AND expresie
unde expresie este orice expresie egal construit.Exemplu:
---------------------
aa db 1011b and 123o
bb db oa4h and 75
------------------------
Operatorul OR
- realizeaz SAU logic bit cu bit ntre valorile a doua expresii. Tabela de adevr pentruoperatorul or este:
a b | a or b
------ | -------
0 0 | 0
1 0 | 1
0 1 | 1
1 1 | 1
i arat c rezultatul este 0 daca biii corespunztori din aceeai poziie a celor 2 expresiisunt amndoi egali cu 0, n caz contrar este 1.sunt amndoi egali cu 0, n caz contrar este 1.
Sintaxa operatorului or este:expresie OR expresie
unde expresie este o expresie legal construitaExemplu:
---------------------
aa db 1011b or 123o
bb db oa4h or 75
------------------------
Operatorul XOR
- realizeaz SAU exclusiv ntre biii celor 2 expresii. Tabela de adevr a operatorului XOReste:
a | b | a XOR b
---|---|----------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
i arat c rezultatul este 1 daca biii corespunztori din cele 2 expresii sunt complementari(unul este 1 i cellalt 0, respectiv 0 i 1). Sintaxa operatorului XOR este:
expresie XOR expresieexpresie XOR expresie
unde expresie este orice expresie corect construit.Exemplu:
-------------------------
x dw 6734h XOR 32745 o
y db 124 XOR 11011011101 b
Operatorii relaionali
- permit compararea valorii a dou expresii. Dac valoarea celor 2 expresii ndeplinetecondiia cerut de operator, rezultatul comparrii este valoarea logic TRUE (1), in cazcontrar este valoarea logic FALSE (0).
Operatorul EQ
Permite compararea valorilor a dou expresii dac sunt egale. Dac sunt egale rezultatul esteconstanta logica TRUE (offh pe octet, offfh pe cuvnt etc.), in caz contrar valoarea FALSE (0).Sintaxa testrii a doua expresii cu operatorul EQ este:
expresie EQ expresieexpresie EQ expresie
unde expresie este o expresie corect definitaExemplu:x dw 239 eq (230 +9) ;
y db 63 eq 45 ;
Operatorul NE
Permite compararea valorilor a dou expresii dac sunt diferite. Dac sunt diferite, rezultatuleste constanta logic TRUE (offh pe octet, offfh pe cuvnt etc.), n caz contrar valoarea FALSE(0). Sintaxa testrii a dou expresii cu operatorul EQ este:
expresie NE expresie
unde expresie este o expresie corect definitExemplu:x dw 239 ne (230 +9) ;
y db 63 ne 45 ;
Operatorul LTOperatorul LT
Determin dac valoarea unei expresii este strict mai mica dect valoarea altei expresii.Daca condiia este ndeplinita rezultatul este constant logic TRUE (offh pe octet, offfh pecuvnt etc.), n caz contrar valoarea FALSE (0). Sintaxa testrii a dou expresii cu operatorul LTeste:
expresie LT expresie
unde expresie este o expresie corect definitExemplu:x dw 239 lt (230 +9)
y db 63 lt 98
Operatorul LE
Determin dac valoarea unei expresii este mai mic sau egal ca valoarea altei expresii.Daca condiia este ndeplinita rezultatul este constanta logica TRUE (offh pe octet, offfh pecuvnt etc.), n caz contrar valoarea FALSE (0). Sintaxa testrii a dou expresii cu operatorul LEeste:
expresie LE expresie
unde expresie este o expresie corect definitaExemplu:x dw 239 le (230 +9)
y db 63 le 8
Operatorul GTOperatorul GT
Determin dac valoarea unei expresii este strict mai mare dect valoarea altei expresii.Dac condiia este ndeplinita rezultatul este constant logic TRUE (offh pe octet, offfh pecuvnt etc.), n caz contrar valoarea FALSE (0). Sintaxa testrii a doua expresii cu operatorul GTeste:
expresie GT expresie
unde expresie este o expresie corect definitExemplu:x dw 239 gt (230 +9)
y db 63 gt 98
Operatorul GE
Determin dac valoarea unei expresii este mai mare sau egal cu valoarea altei expresii.Daca condiia este ndeplinita rezultatul este constanta logic TRUE (offh pe octet, offfh pecuvnt etc.), n caz contrar valoarea FALSE (0). Sintaxa testrii a dou expresii cu operatorul GEeste:
expresie GE expresie
unde expresie este o expresie corect definitExemplu:x dw 239 ge (230 +9)
y db 63 ge 8
Operatori de deplasare
- realizeaz deplasarea la stnga, respectiv la dreapta a valorii unei expresii cu un numrspecificat de bii.
Operatorul SHL (Shifts Left)
- realizeaz deplasarea stnga a biilor valorii unei expresii cu un numr de poziii specificat dectre alt expresie. Biii cei mai semnificativi care ies se pierd iar biii cei mai puin semnificativise completeaz cu 0.
Sintaxa deplasrii valorii unei expresii la stnga cu operatorul SHL este:expresie shl num
unde:- expresie este o expresie corect definit- num este numrul de bii cu care se face deplasareaExemplu:
x db -16 shl -1
y db 6bh shl 1y db 6bh shl 1
---------------------
mov al, 18o shl 2
Operatorul SHR (Shifts Right)
- realizeaz deplasarea aritmetic dreapta a biilor valorii unei expresii cu un numr de poziiispecificat de ctre o alt expresie. Biii cei mai semnificativi care ies se pierd iar bitul cel maipuin semnificativ se reface.
Sintaxa deplasrii valorii unei expresii la dreapta cu operatorul SHR este:expresie shr num
unde:- expresie este o expresie corect definit- num este numrul de bii cu care se face deplasareaExemplu:
x db -16 shr -1
y db 6bh shr 1y db 6bh shr 1
---------------------
mov al, 18o shr 2
Operatorul SEG
Directiva SEG returneaz adresa de segment a operandului. Utilizndoperatorul SEG se poate obine adresa de segment a unei etichete, variabile, a unui numede grup sau a oricrui operand din memorie. Sintaxa este:
SEG expresie
unde expresie este o etichet, variabil, nume de segment, nume de grup, sau orice altoperand din memorie.Exemplu:
x dw 75h
-------------
mov ax, seg x ; ncarc in ax adresa de segment a lui x
Operatorul OFFSET
Operatorul OFFSET returneaz adresa efectiv a operandului. Utilizndoperatorul SEG se poate obine adresa de segment a unei etichete, variabile, a unui numede grup sau a oricrui operand din memorie. Sintaxa este:
OFFSET expresie
unde expresie este o etichet, variabil, nume de segment, nume de grup, sau orice altoperand din memorie.
Exemplu:x dw 75h
-------------
mov ax, offset x ; ncarc in ax adresa
efectiva ( offset-ul ) a lui x
Operatorul TYPE
- returneaz numrul de octei (bytes) alocai de asamblor unei tip variabile. OperatorulTYPE returneaz valoarea 0ffffh pentru variabile near (din acelai segment), valoarea0fffeh pentru variabile far (din alt segment) si zero pentru constante.
Sintaxa operatorului:
TYPE expresie
unde expresie este o variabil, o etichet near, o etichet far sau o constant.
Exemplu:
alfa db 75
beta dd 4236h
gama dw 10 dup(34,45)
x dw 11,3,2,4,5,33,-6
n equ ($-x)/type x ; determina numarul de elemente
mov ax,type alfa ;ax=1
mov bx, type beta ;bx=4
mov cx,type gama ;cx=2
Operatorul LENGTHOperatorul LENGTH
- returneaz numrul de expresii din lista de expresii a variabilei.Sintaxa operatorului:
LENGTH variabila
unde variabila este o variabil deja definit.
Exemplu:
alfa db 75
beta dd 4236h
gama dw 10 dup(34,45)
mov ax,LENGTH alfa ;ax=1
mov bx, LENGTH beta ;bx=1
mov cx, LENGTH gama ;cx=10
Operatorul HIGH
- returneaz primii 8 bii cei mai semnificativi ai unei expresii constante.Sintaxa:
HIGH expresie
unde expresie o expresie constant.
Exemplu
a equ 0abc3h
mov al, high a ; (al) = 0abh
Operatorul LOW
- returneaz ultimi 8 bii cei mai puin semnificativi ai unei expresii constante.Sintaxa:
LOW expresie
unde expresie este o expresie constant.
Exemplu:
a equ 0abc3h
mov al,low a ; (al)=0c3h
Operatorul PTROperatorul PTR
- foreaz tipul unei expresii.Sintaxa:type ptr expresie
unde- type este BYTE, WORD, DWORD, FWORD,QWORD, TBYTE pentru operanzii din
memorie, sau NEAR, FAR, PROC pentru etichete;- expresie este un operand din memorie sau o etichet.
Exemplu:
alfa dw 45ach
mov al,byte ptr alfa ; (al)=0ach
Precedena operatorilor
Ordinea de evaluare a unei expresii este determinat de prioritile asociate operatorilor.Operatorii cu prioritate mai mare sunt evaluai primii. n cazul aceleiai prioritari, expresiile suntevaluate de la stnga la dreapta. Folosind parantezele rotunde poate fi modificat ordinea deevaluare. n cazul n care exist mai multe nivele de paranteze evaluarea ncepe cu paranteza ceamai din interior.
Prioritatea operatorilor este:
1. length, size, width, mask, ( ), < >, operatorul camp
structura(.)
2. ptr, offset, seg, type, prefix segment (:)
3. high, low
4. +, - (ca operatori unari)
5. *, /, mod, shl, shr
6. +, - (operatori binari)
7. eq, ne, lt, le, gt, ge
8. not
9. and
10. or, xor10. or, xor
11. short
Numrtorul de locaii
Numrtorul de locaii ($) este un operator special care returneaz adresa instruciunii asamblate.
Exemplu
sir db acesta este un sir
lung equ $-sir ; lung este lundimea sirului
x dw 1,2,3,4,55
n equ ($-x)/ type x ;n este numarul de elemente
generate
4.2.2. Abrevieri
OPR operandSCR operand sursDST operand destinaieREG registruREG8 registru de 8 bii: al, ah, bl, bh, cl, ch, dl, dhREG16 registru de 16 bii: ax, bx, cx, dx, bp,sp, si, diREG32 registru de 32 bii: eax, ebx, ecx, edx, ebp, esp, esi, ediREGS registru segment: CS, DS, ES, SS pentru procesoare de 16 bii i n plus FS si GSpentru procesoarele de 32 bii;CNT numrtorDISP Deplasament in generalDISP Deplasament in generalD8 Deplasament pe 8 biiD16 Deplasament pe 16 bii numai pentru procesoarele de 16 biiD32 Deplasament pe 32 biiADDR AdresaEA Adresa efectivSEG Adresa de segmentDATA Operand imediat in generalDATA8 Operand imediat pe 8 biiDATA16 Operand imediat pe 16 biiDATA32 Operand imediat pe 32 bii
4.1. Simboluri si abrevieri folosite
4.1.1. Simboluri
nlocuit cu inter-schimbat cu( X ) coninutul lui X
si logic sau logic
sau exclusiv complementul lui X
(X:Y) coninutul lui X concatenat cu Y, X fiind poriunea cea mai semnificativ
X
(X:Y) coninutul lui X concatenat cu Y, X fiind poriunea cea mai semnificativ