Sunteți pe pagina 1din 7

Programare n Limbaj de Asamblare - Laborator nr.

LABORATOR NR. 5
5.1 MACRODEFINIII. DEFINIIE I SINTAX

Macrodefiniiile permit atribuirea unui nume simbolic la un bloc de instruciuni surs i apoi folosirea acelui nume n program pentru a reprezenta blocul de instruciuni. Pentru definirea unui macro se folosesc directivele MACRO i ENDM, cu urmtoarea sintax: nume MACRO [par1, [par2,.[par n]]] instruciuni ENDM unde: nume este numele macro (este unic) i folosit n program pentru apelul macro [par1, [par2,.[par n]]] sunt numii i parametri formali, fiind nlocuii cu parametri reali n momentul apelului (evident, ei sunt opionali). Pot fi specificai orici parametri, numai s se ncadreze pe o linie. Separatorii folosii sunt virgula (cel mai des), spaii sau TAB.

5.2

APELUL MACRODEFINIIILOR

Aceste apeluri se mai numesc i macroinstruciuni. Sintaxa este: nume [arg1, [arg2,.[arg n]]] unde: nume este numele macro anterior definit [arg1, [arg2,.[arg n]]] sunt valorile aferente parametrilor fictivi din definire macro, aceti parametri fiind poziionali La ntlnirea oricrui apel de macro, asamblorul va expanda macro-ul, nlocuind linia de apel cu instruciunile care l compun. Macro-ul poate fi plasat oriunde n program, dar trebuie s fie definit nainte de apel (spre deosebire de proceduri). Directiva LOCAL se folosete ntr-un macro pentru a defini simbolurile din cadrul macro-ului. Rolul ei este de a evita apariia simbolurilor multiplu definite, la expandrile repetate ale macro-ului. Sintaxa directivei: LOCAL simbol1[simbol2,[simbol n]] unde: simbol1[simbol2,[simbol n]] sunt simboluri locale ale macro-ului.

Programare n Limbaj de Asamblare - Laborator nr. 5

5.3

MACRODEFINIIILE REPT, IRP, IRPC

5.3.1 Macrodefiniia REPT


REPT expresie corp macro ENDM Permite repetarea grupului de instruciuni din interior la valoarea la care este evaluat expresia expresie.

5.3.2 Macrodefiniia IRP


IRP parametru, <arg1[, arg2...]> corp macro ENDM Permite repetarea necondiionat a corpului macro pentru fiecare argument din lista care va nlocui parametrul parametru. Parantezele unghiulare sunt obligatorii. Exemplu: Push_reg MACRO reg PUSH reg ENDM MACRO IRP reg, <ax, bx, cx, dx, si, di, bp, sp> Push_reg reg

Push_all_reg ENDM

5.3.3 Macrodefiniia IRPC


IRPC parametru, ir de caractere corp macro ENDM Este similar cu IRP, numai c parametrul parametru este nlocuit de fiecare liter din irul de caractere. Se va reveni la transmisia parametrilor unei proceduri, exemplificnd diferitele metode cu ajutorul macro, care vor prelua secvena de ncrcare a parametrilor anterior apelului procedurii.

Programare n Limbaj de Asamblare - Laborator nr. 5

5.4

TRANSMITEREA PARAMETRILOR

5.4.1 Transmiterea parametrilor prin regitri


.DATA ADREZ DB ? .CODE LOAD MACRO P1, P2, PEX MOV AX, P1 ;ncrcare parametri valoare MOV CX, P2 MOV BX, PEX ;este o adres ENDM START: MOV AX, @DATA MOV DS, AX LOAD 5, 6, <OFFSET ADREZ> CALL SUB MOV AL, [BX] ;preia rezultatul din locaia de memorie ADREZ adresat de BX referire complet ;nu mai trebuie utilizat operatorul PTR SUB: ADD AX, CX MOV [BX], AX ;depune rezultatul

Acest mod de transmitere a parametrilor prezint avantajul unui cod scurt, ca i al vitezei, dar i dezavantajul posibilitii transmisiei unui numr mic de parametri.

5.4.2 Transmiterea parametrilor prin locaii fixe de memorie


.DATA VAL1 DB ? VAL2 DB ? VAL3 DB ? .CODE LOAD MACRO P1, P2 MOV VAL1, P1 MOV VAL2, P2 ENDM START: MOV AX, @DATA MOV DS, AX LOAD 5, 6 ;ncrcare parametri valoare

Programare n Limbaj de Asamblare - Laborator nr. 5 CALL SUB MOV AL, VAL3 ;preia rezultatul din locaia de memorie VAL3 SUB: MOV AL, VAL1 MOV AL, VAL2 MOV VAL3, AL RET ;depune rezultatul

Metoda se utilizeaz, n general, cnd exist mai muli parametri de transmis. Avantajul const n faptul c utilizeaz un numr mic de regitri, cu preul unui cod mai lung datorit instruciunilor de lucru cu memoria. Variabilele implicate n transfer se numesc i statice (fixe), deoarece tot timpul vor fi gsite la aceleai locaie de memorie.

5.4.3 Transmiterea parametrilor prin stiv


.DATA ADREZ DB ? .CODE LOAD MACRO P1, P2, PEX PUSH P1 ;ncrcare parametri valoare PUSH P2 PUSH PEX ;adresa ENDM START: MOV AX, @DATA MOV DS, AX LOAD 5, 6, <OFFSET ADREZ> CALL SUB MOV AL, ADREZ SUB: PUSH BP MOV BP, SUB SP, MOV AL, MOV [BP ADD AL, MOV [BP ADD SP, POP BP RET 6 SP 2 [BP + - 2], [BP + + 4], 2

8] AL 6] AL

;depunere rezultat ;refacere stiv ;descrcare stiv

Programare n Limbaj de Asamblare - Laborator nr. 5

5.4.4 Transmiterea parametrilor prin variabilelor locale procedurii


.DATA ADREZ DB ? .CODE

stiv

cazul

utilizrii

LOAD MACRO P1, P2, PEX PUSH P1 ;ncrcare parametri valoare PUSH P2 PUSH PEX ;adresa ENDM START: MOV AX, @DATA MOV DS, AX LOAD 5, 6, <OFFSET ADREZ> CALL SUB MOV AL, ADREZ SUB: PUSH BP MOV BP, SUB SP, MOV AL, MOV [BP ADD AL, MOV [BP ADD SP, POP BP RET 6 SP 2 [BP + - 2], [BP + + 4], 2

8] AL 6] AL

;depunere rezultat ;refacere stiv ;descrcare stiv

Programare n Limbaj de Asamblare - Laborator nr. 5

n cazul ultimelor dou metode, variabilele implicate n transfer se mai numesc i dinamice deoarece, pe parcursul execuiei programului, pot ocupa diferite zone de memorie n funcie de context (stare), fiind suficient numai schimbarea registrului SP. Aceste ultime dou metode sunt folosite de compilatoarele moderne la transmiterea parametrilor. Ultima metod se utilizeaz des n cazul procedurilor recursive sau a celor reentrante.

5.5

TEM

1. Analizai programul SOUND.ASM. Modificai-l astfel nct s conin: procedur de programare timer pe o anumit not muzical, parametrii transmii fiind adresa tabelului TABW i indexul n acest tabel al notei respective; parametrii vor fi transmii prin stiv; procedur de temporizare, folosind ca parametru coninutul din SI i o bucl de temporizare LOOP; programul principal va conine apelul acestor rutine cu anumite note muzicale i diferite temporizri. 2. Urmrii programul SMIN.ASM, care calculeaz minimul unui ir de octei. Vei aduga instruciunile pentru calculul maximului aceluiai ir, apoi vei calcula suma ntre minim i maxim. Vei furniza macro-ului ali trei parametri: adresa rutinei de calcul (minim/maxim); adresa variabilei de memorie care pstreaz minimul/maximul; valoarea iniial pentru calculul minim-ului/maxim-ului. Suma ntre minim i maxim se va face n programul principal. Toate acestea le vei face folosind transferul parametrilor att prin regitri i zone fixe de memorie ca n exemplul dat, ct i prin stiv, caz n care trebuie s fii ateni la secvena de ncrcare a parametrilor.

Programare n Limbaj de Asamblare - Laborator nr. 5

5.6

CUPRINS

Laborator nr. 5 .................................................................................................................. 1 5.1 Macrodefiniii. Definiie i sintax ................................................................... 1 5.2 Apelul macrodefiniiilor ................................................................................... 1 5.3 Macrodefiniiile REPT, IRP, IRPC .................................................................. 2 5.3.1 Macrodefiniia REPT................................................................................ 2 5.3.2 Macrodefiniia IRP ................................................................................... 2 5.3.3 Macrodefiniia IRPC ................................................................................ 2 5.4 Transmiterea parametrilor ................................................................................ 3 5.4.1 Transmiterea parametrilor prin regitri .................................................... 3 5.4.2 Transmiterea parametrilor prin locaii fixe de memorie........................... 3 5.4.3 Transmiterea parametrilor prin stiv ........................................................ 4 5.4.4 Transmiterea parametrilor prin stiv n cazul utilizrii variabilelor locale procedurii.................................................................................................................. 5 5.5 TEM ............................................................................................................... 6 5.6 Cuprins ............................................................................................................. 7