Sunteți pe pagina 1din 51

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 limbajului 3.1. Alfabetul limbajului
Mulimea de semne denumite simboluri care formeaz alfabetul limbajului este compus
din:
- 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) i
unele caractere speciale (de exemplu liniua de subliniere) cu condiia ca acestea sa nceap cu o
liter 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 se
asociaz o valoare. Constantele numerice pot fi: ntregi sau reale. Constantele ntregi reprezint
numerele ntregi reprezentate n zecimal, binar, octal sau hexazecimal. O constant ntreag este
reprezentat n binar dac apare cu prefixul B, n octal dac este prefixat de litera O, n
hexazecimal 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 zecimal
Observaie. Pentru a evita confuzia ntre constantele hexazecimale care ncep cu una din Observaie. 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 va
ncepe cu cifra zero.
Utiliznd directiva RADIX se poate impune reprezentarea implicit a constantelor ntr-o
anumit 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 (32
bii ) sau pe 64 bii.
Constantele ntregi pot fi codificate n BCD mpachetat sau nempachetat. Constantele zecimale
codificate 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. Dac
caracterul apostrof face parte din ir se dubleaz. De exemplu, daca irul de caractere este: azi
21.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:
<eticheta>: <mnemonica> <operanzi>; <comentarii>
unde:
a) Cmpul <eticheta>: este opional i poate conine o etichet care este nume simbolic, un
identificator cruia i se asociaz o valoare egal cu adresa primului octet al instruciunii. Prezena
acestui cmp este opionala. Dac acest cmp nu exist, nu se mai folosete caracterul delimitator
:
b) Cmpul <mnemonica>. Mnemonica este un ir de litere ce identific instruciunea
respectiv, sau clase de instruciuni creia aparine aceasta i reprezint numele instruciunii sau respectiv, sau clase de instruciuni creia aparine aceasta i reprezint numele instruciunii sau
directivei. Acest cmp este obligatoriu. De exemplu: MOV, INC, DEC, ADD.
c) Cmpul <operanzi>. Prezena i formatul acestui cmp depinde de tipul instruciunii. Acest
cmp 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 ce
conin nume de registre, constante, identificatori i operatori.
d) Cmpul <comentariu>. Prezena acestui cmp este opionala. Daca lipsete, caracterul ;
este opional, astfel prezena acestuia este obligatorie. Acest cmp poate conine un mesaj
referitor la metoda folosit, instruciunea n cauz etc. Dac o linie este de comentariu aceasta va
ncepe 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 ale
asamblorului ce in locul declaraiilor de variabile ntlnite n programarea n limbaje de nivel
nalt.
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 o
adres 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 de
memorie, care pot fi locaii ale instruciunilor, operanzilor sau ale unor proceduri. Etichetele unor
instruciuni sau proceduri au trei atribuite: segment, offse (deplasament ) i poziionare (near sau
far ), iar pentru operanzi au atributul tip ( byte, word, dword, etc.)
Exemple
alfa: add ax,cx
cauta proc near
calcule proc far calcule proc far
. Directive de generare a datelor
n limbajele de asamblare 80x86 se poate opera cu anumite tipuri de date, recunoscute
de 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: un
ntreg fr semn cuprins intre 0 si 225, un ntreg cu semn cuprins intre 128 si 127, sau un
caracter ASCII.
Definirea datelor de tip byte se face cu ajutorul directivei DB (Define Byte) care are
sintaxa:
[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, oach
DB -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 +4
Valoarea 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 2
octei 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 puin
semnificativ), 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 -2
15
si 2
15
1,
- un ntreg pe 16 bii fr semn, cuprins intre 0 si 2
16
1
- sau o adres de memorie de 16 bii.
Reprezentarea celor 2 octei ai cuvntului n memorie se face astfel nct octetul cel
mai puin semnificativ este memorat la adresa cea mai mic. De exemplu: dac valoarea 2345h
este memorat la adresa 2000h, atunci octetul 45h se va afla la adresa 2000h, iar octetul 23h la
adresa 2001h.
Generarea datelor de tip cuvnt se poate face folosind directiva de tip DW(Define
Word), 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, 2476o
DW -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 +14
Constanta 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 (la
procesoarele 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 (Define
Double 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 nct
cuvntul cel mai puin semnificativ este memorat la adresa cea mai mic. De exemplu, dublul
cuvnt 12345678 h, aflat la adresa 2000h se memoreaz astfel: cuvntul 5678h se memoreaz la
adresa 2000h, iar cuvntul 1234h la adresa 2002h, adic adresa de segment este memorat la
adrese mari, iar deplasamentul (offsetul) la adrese mici.
Secvena de directive :
gama DD 12345678h, 1, -1
DD 1.0, -1.0
DD gama
presupunnd 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 un
numr 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 cel
mai 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 din
registrele coprocesorului matematic.
Informaia stocat ntr-un tbyte poate fi: un numr ntreg reprezentat ca o secvena de
cifre 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 memorie
generat 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, care
ar 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 ai
tetradei 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 99999
i
+79999 99999 99999 99999
cifra 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 1
tipur. ASM
1 0000 .model small
2 0000 .stack 100h 2 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 adresa
relativ la coninutul registrului ds, adresa exprimat n hexazecimal pe 4 cifre hexa. Urmeaz
apoi coninutul cmpului de date corespunztor unei linii. Dac se continu pe linia urmtoare va
aparea semnul +. Valorile ntregi, negative se reprezint in complement fa de doi, iar cele reale
sunt reprezentate n virgul mobil.
Prezena caracterelor r i s n aceast zon indic faptul c este vorba despre o adres de
segment 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 61
ds:0008 61 62 63 67 45 4ABC BB
ds:0010 03 3E 05 FD E1 03 1E 62
ds:0018 61 78 56 34 12 01 00 00
ds:0020 00 FF FF FF FF 00 00 80
ds:0028 3F 00 00 80 BF 00 00 74
ds:0030 BE 00 00 20 3D 19 00 B0
ds:0038 5A 02 00 00 00 00 00 00
ds:0040 00 FF FF FF FF FF FF FF
ds:0048 FF 00 00 00 00 00 00 04
ds:0050 40 00 00 00 00 00 00 04
ds:0058 C0 77 77 77 77 77 87 85
ds:0060 88 88 08 55 55 55 55 55 ds:0060 88 88 08 55 55 55 55 55
ds:0068 55 55 55 55 85 56 34 12
ds:0070 90 78 56 34 12 67 45 56
ds:0078 34 12 90 78 56 34 12 67
ds:0080 C5 45 33 00 00 00 00 00
ds:0088 00 00 00 45 33 00 00 00
ds:0090 00 00 00 00 80 00 00 00
ds:0098 00 00 00 00 80 FF 3F 00
ds:00A0 00 00 00 00 00 00 80 FF
ds:00A8 BF 00 00 00 00 00 00 00
Prima coloana reprezint adresa fizic de memorie sub forma ds:xxx unde ds este registrul
segment de date, iar xxxxh reprezint ofsetul, adresa relativ din segmentul coninut n ds. n
continuare pe fiecare linie apar 8 octei de memorie.
Valoarea ntreag alfa = 65 = 40 + 25 = 41
16
reprezentat pe un octet prin 41h se afl la
adresa 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 astfel
6745. 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 utiliza
directiva LABEL a crei sintax este:
<variabila> LABEL <tip>
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 un
cuvnt cheie al asamblrii unui nume simbolic.
- Asamblorul va nlocui numele simbolic cu valoarea asignat. Forma general a directivei:
variabila equ expresie variabila equ expresie
unde;
- 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 program Valorile 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 predefinit
sau un simbol al limbajului de asamblarea unui nume simbolic.
Spre deosebire de directiva EQU, unde valoarea asignat numelui simbolic nu poate fi
schimbat, 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 <eticheta> END <eticheta>
Eticheta apare numai n cazul indicrii sfritului programului principal i este asociat punctului
de ncepere al programului. Adresa asociat acestei etichete este adresa la care face salt
ncrctorul, 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 begin end begin
Directiva EVEN
Directiva EVEN face ca adresa urmtorului octet s fie par. Datele generate pe cuvnt pot fi
aliniate sau nu. n cazul n care sunt aliniate (se afl la adrese pare) sunt executate ntr-un singur
ciclu 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. Pentru
alinierea 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 <expresie-constant>
Unde expresie-constant este o expresie ce se poate evalua n timpul asamblrii. Directiva face ca
urmtorul octet generat sa fie n poziia n+1 de la nceputul segmentului, unde n este valoarea
expresiei 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 paranteze
dup cuvntul DUP. Forma general a acestui operator este
<expresie_constant> DUP ( <lista_expresii_constante>)
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 01 56 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 n
urma evalurii. Operatorii aritmetici sunt +, -, *, /, mod (restul mpririi ntregi). Operaiile
aritmetice 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 logici Operatori 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 0
0 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 adevr
corespunztoare operatorului and este:
x | y | x and y
---|---|----------
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1
Operatorul 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 pentru
operatorul 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 expresii
sunt 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 construita
Exemplu:
---------------------
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 XOR
este:
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 expresie expresie 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 ndeplinete
condiia cerut de operator, rezultatul comparrii este valoarea logic TRUE (1), in caz
contrar este valoarea logic FALSE (0).
Operatorul EQ
Permite compararea valorilor a dou expresii dac sunt egale. Dac sunt egale rezultatul este
constanta 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 expresie expresie EQ expresie
unde expresie este o expresie corect definita
Exemplu:
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, rezultatul
este 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 definit
Exemplu:
x dw 239 ne (230 +9) ;
y db 63 ne 45 ;
Operatorul LT Operatorul 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 pe
cuvnt etc.), n caz contrar valoarea FALSE (0). Sintaxa testrii a dou expresii cu operatorul LT
este:
expresie LT expresie
unde expresie este o expresie corect definit
Exemplu:
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 pe
cuvnt etc.), n caz contrar valoarea FALSE (0). Sintaxa testrii a dou expresii cu operatorul LE
este:
expresie LE expresie
unde expresie este o expresie corect definita
Exemplu:
x dw 239 le (230 +9)
y db 63 le 8
Operatorul GT Operatorul 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 pe
cuvnt etc.), n caz contrar valoarea FALSE (0). Sintaxa testrii a doua expresii cu operatorul GT
este:
expresie GT expresie
unde expresie este o expresie corect definit
Exemplu:
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 pe
cuvnt etc.), n caz contrar valoarea FALSE (0). Sintaxa testrii a dou expresii cu operatorul GE
este:
expresie GE expresie
unde expresie este o expresie corect definit
Exemplu:
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 numr
specificat de bii.
Operatorul SHL(Shifts Left)
- realizeaz deplasarea stnga a biilor valorii unei expresii cu un numr de poziii specificat de
ctre alt expresie. Biii cei mai semnificativi care ies se pierd iar biii cei mai puin semnificativi
se 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 deplasarea
Exemplu:
x db -16 shl -1
y db 6bh shl 1 y 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 poziii
specificat de ctre o alt expresie. Biii cei mai semnificativi care ies se pierd iar bitul cel mai
puin 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 deplasarea
Exemplu:
x db -16 shr -1
y db 6bh shr 1 y db 6bh shr 1
---------------------
mov al, 18o shr 2
Operatorul SEG
Directiva SEG returneaz adresa de segment a operandului. Utiliznd
operatorul SEG se poate obine adresa de segment a unei etichete, variabile, a unui nume
de 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 alt
operand 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. Utiliznd
operatorul SEG se poate obine adresa de segment a unei etichete, variabile, a unui nume
de 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 alt
operand 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. Operatorul
TYPE returneaz valoarea 0ffffh pentru variabile near (din acelai segment), valoarea
0fffeh 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 LENGTH Operatorul 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 PTR Operatorul 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 sunt
evaluate de la stnga la dreapta. Folosind parantezele rotunde poate fi modificat ordinea de
evaluare. n cazul n care exist mai multe nivele de paranteze evaluarea ncepe cu paranteza cea
mai 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, xor 10. 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 operand
SCR operand surs
DST operand destinaie
REG registru
REG8 registru de 8 bii: al, ah, bl, bh, cl, ch, dl, dh
REG16 registru de 16 bii: ax, bx, cx, dx, bp,sp, si, di
REG32 registru de 32 bii: eax, ebx, ecx, edx, ebp, esp, esi, edi
REGS registru segment: CS, DS, ES, SS pentru procesoare de 16 bii i n plus FS si GS
pentru procesoarele de 32 bii;
CNT numrtor
DISP Deplasament in general DISP Deplasament in general
D8 Deplasament pe 8 bii
D16 Deplasament pe 16 bii numai pentru procesoarele de 16 bii
D32 Deplasament pe 32 bii
ADDR Adresa
EA Adresa efectiv
SEG Adresa de segment
DATA Operand imediat in general
DATA8 Operand imediat pe 8 bii
DATA16 Operand imediat pe 16 bii
DATA32 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

S-ar putea să vă placă și

  • PODSC2F1
    PODSC2F1
    Document2 pagini
    PODSC2F1
    Radu Radulescu
    Încă nu există evaluări
  • PODSC4F2
    PODSC4F2
    Document2 pagini
    PODSC4F2
    Ignat Sorina
    Încă nu există evaluări
  • Echilibrul Bugetar Intre Necesitate Si Posibilitati
    Echilibrul Bugetar Intre Necesitate Si Posibilitati
    Document16 pagini
    Echilibrul Bugetar Intre Necesitate Si Posibilitati
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • MODEL Contract Achizitie-Draft
    MODEL Contract Achizitie-Draft
    Document3 pagini
    MODEL Contract Achizitie-Draft
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • PODSC4F3
    PODSC4F3
    Document1 pagină
    PODSC4F3
    Razvan
    Încă nu există evaluări
  • PODSC4F2
    PODSC4F2
    Document2 pagini
    PODSC4F2
    Ignat Sorina
    Încă nu există evaluări
  • MODEL - Proces Verbal Predare Primire
    MODEL - Proces Verbal Predare Primire
    Document1 pagină
    MODEL - Proces Verbal Predare Primire
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • Probleme SCTR
    Probleme SCTR
    Document33 pagini
    Probleme SCTR
    Toma Adi
    Încă nu există evaluări
  • Proiect Securitatea Datelor
    Proiect Securitatea Datelor
    Document6 pagini
    Proiect Securitatea Datelor
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • MP 2
    MP 2
    Document38 pagini
    MP 2
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • Sisteme de Timp Real
    Sisteme de Timp Real
    Document156 pagini
    Sisteme de Timp Real
    Mihai-Daniel Dumitru
    100% (1)
  • Cur Suri
    Cur Suri
    Document12 pagini
    Cur Suri
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • RCTS
    RCTS
    Document9 pagini
    RCTS
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • Cap 12 A5
    Cap 12 A5
    Document39 pagini
    Cap 12 A5
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • MP 1
    MP 1
    Document36 pagini
    MP 1
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • MP 1
    MP 1
    Document36 pagini
    MP 1
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • Componente
    Componente
    Document3 pagini
    Componente
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • Componente
    Componente
    Document3 pagini
    Componente
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • Lab1 MovileBinome
    Lab1 MovileBinome
    Document3 pagini
    Lab1 MovileBinome
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • Swing
    Swing
    Document3 pagini
    Swing
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • BPLC00
    BPLC00
    Document24 pagini
    BPLC00
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • Cursalg 2006 A
    Cursalg 2006 A
    Document211 pagini
    Cursalg 2006 A
    Florrin Klr
    Încă nu există evaluări
  • Creditori J: Obiectivele Auditului
    Creditori J: Obiectivele Auditului
    Document8 pagini
    Creditori J: Obiectivele Auditului
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • M
    M
    Document2 pagini
    M
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • Cursalg 2006 A
    Cursalg 2006 A
    Document211 pagini
    Cursalg 2006 A
    Florrin Klr
    Încă nu există evaluări
  • Cursalg 2006 A
    Cursalg 2006 A
    Document211 pagini
    Cursalg 2006 A
    Florrin Klr
    Încă nu există evaluări
  • Declaratie Consimtamant
    Declaratie Consimtamant
    Document1 pagină
    Declaratie Consimtamant
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • Formular Inreg Grup Tinta Anexa - 1
    Formular Inreg Grup Tinta Anexa - 1
    Document7 pagini
    Formular Inreg Grup Tinta Anexa - 1
    Valeriu-Marius Niţu
    Încă nu există evaluări
  • RLC
    RLC
    Document8 pagini
    RLC
    adina_vladucu
    Încă nu există evaluări