PLA-Elememente de Baza

51
Elementele de bază ale limbajului Obiective: - alfabetul limbajului, identificatori, constante - format ul general al unei instrucţ iuni - variabi le - directive de generare a datelor - alte directive: LABEL, EQU, =, RADIX, END, EVEN, ORG  3.1. Alfabetul limbajului Mulţimea de semne denumite simboluri care formează alfabetul limbajului este compus din: - li terele mici si mari al e alfabetu lui engl ez - cifr ele zeci mal e ale sis temulu i de cif re arabe; 0,1,2,3,4,5,6,7,8,9. - car acter e special e( de punctuaţ i e) : . , : ; ’ “? ( ) _ - + / * etc. Asamblorul nu face distincţie între literele mici şi literele mari.

Transcript of PLA-Elememente de Baza

  • 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