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.
5.3
Push_all_reg ENDM
5.4
TRANSMITEREA PARAMETRILOR
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.
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.
8] AL 6] AL
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
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.
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