|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
Proceduri, macrodefinitii - limbaj de asamblare | ||||||
|
||||||
1. Definirea procedurilor
Inceputul unei proceduri in limbaj de asamblare poate fi definit cudirectiva
PROC, iar sfirsitul procedurii cu directiva ENDP (daca procedura esteNEAR, pct.de
intrare in procedura poate fi nume:, nemaifiind necesara dirct.ENDP Sintaxa:
nume PROC aNEAR|FARi . instructiuni RET aconstantainume ENDP nume - identificatorul procedurii; Procedurile sunt implicit de tip NEAR (poate fi apelata doar din segmentulde cod curent). Procedurile sunt implicit de tip NEAR (poate fi apelata doar din segmentulde cod curent). La revenire, se 'descarca' stiva cu numarul de octeti dati de<constanta>. Daca <constanta> nu apare, se executa RET NEAR/FAR, in functie detipul procedurii. 2. Apelarea procedurilor Apelul unei proceduri presupune transmiterea parametrilor (daca estecazul) si apoi apelul propriu-zis - printr-o instructiune CALL- care determinasalvarea in stiva a lui IP - pentru procedura NEAR, sau a lui CS si IP (inaceasta ordine) - pentru procedura FAR. In continuare se transfera controlulprocedurii prin incarcarea lui IP (sau IP si CS) cu adresa de start aprocedurii. La iesirea din procedura se reface starea dinaintea apelului (fiein interior, fie in exteriorul procedurii) si se preiau (eventualii) parametriide iesire. SEG1 SEGMENT SEG2 SEGMENT ASSUME CS:SEG1 ASSUME CS:SEG2 ÚAAAAAAAAAAAAAAAAAA¿ ÚAAAAAAAAAAAAAAAA¿ ÚAAAAAAA¿ ³ ³ ³ ³ ³ START AAAAA0 PROC1 PROC ³ ³ PQR PROC FAR ³ AAAAAAAAÙ ³ . ³ ³ ³ ³ . ³ ³ ³ ÚAAAAAA0 CALL ABC ³ ³ ³ ÚAAAAAAA0B0: MOV AL,2 ³ ÚAAAAAAAA0XYZ LABEL FAR ³ ³ 1 ³ ³ ³ ³ ³ ³ 1 ³ PROC1 ENDP ³ ³ ³ ³ ³ 2AAAA0ABC PROC NEAR ³ 1 ³ ³ 1 ³ . ³ 2 ÚAAAA0 RET 8 ³ 4 ³ . ³ 3 ³ ³ ³ 3 ³ Z DD XYZ ³ ³ ³ ³ ³ ³ ³ CALL Z 2AAAAAAAAAAÙ ³ ³ ³ ³ ³ A0: INC BX 2AAAAAAAAAA0 32AÙ ³ ³ ³ ³ . ³ ³ ³ ³ ³ . ³ ³ ³ AAAAAAAAAAAA0 RET ³ ³ ³ ³ ABC ENDP ³ ³ PQR ENDP ³ AAAAAAAAAAAAAAAAAAAÙ AAAAAAAAAAAAAAAAAÙ SEG1 ENDS SEG2 ENDSPoate fi dat prinRESET HW, intrer.,CALL, JUMPCS<-SEG1, IP<-OFFSET PROC1 SP <-SP-2aSPi<-IPIP<-OFFSET ABCSP<-SP-2aSPi<-CSCS<-SEG2SP<-SP-2aSPi<-IPIP<-OFFSET XYZIP<-aSPiSP<-SP+2CS<-aSPiSP<-SP+8 (RET 8)IP<-aSPiSP<-SP+2 Fig. 2 Actiuni executate la momentele de apelare si revenire din proceduri. Revenirea din procedura XYZ se face cu RET 8 prin care in afara dereincarcarea registrelor CS si IP cu vechile valori, se descarca stiva cu 8octeti (se presupune ca stiva a fost incarcata in procedura ABC, inainte de aexecuta chemarea CALL Z, cu parametrii de lucru efectivi ai subrutinei (8cuvinte); aceasta este o metoda de comunicare a parametrilor prin intermediulstivei, preferata atunci cind numarul de parametri este mare. O alta metoda detransmitere a parametrilor este prin intermediul registrelor. Exemplu: ;Definire si apel procedura cu transmitere parametri prin stiva mov ax,10 ;constanta 10 este argument 3 push ax push arg2 ;cont.loc.de mem. arg2 este argumentul 2 push cx ;registrul CX este argumentul 1 call addup;se apeleaza procedura add sp,6 ;se distrug argumentele introduse, ;echivalent cu RET 6 in proced. addup .addup PROC NEAR push bp ;se salveaza pointerul de baza, fiind ;modificat in procedura mov bp,sp mov ax,abp+4i;AX<-primul argument add ax,abp+6i;al 2 lea argument se aduna la primul add ax,abp+8i;adun si argumentul 3 pop bp ;se reface BP retaddup ENDP Macrodefinitii Macrodefinitiile permit atribuirea unui nume simbolic la un bloc deinstructiuni sursa si apoi folosirea acelui nume in program pentru a reprezentablocul de instructiuni. 1. Definire macro Se folosesc directivele MACRO si ENDM, cu urmat. sintaxa:nume MACRO apar1,apar2,....apar nii...i instructiuni . . ENDMunde: nume - este numele macro (este unic) si folosit in pg. ptr. apelul macro. apara....ii..i - sunt numiti si parametri formali, fiind inlocuiti cuparametri reali in mom. apelului (evident, ei sunt optionali). Pot fispecificati oriciti param.numai sa se incadreze pe o linie. Separatorii folositisunt virgula(cel mai des), spatii sau TAB. 2. Apelul macrodefinitiilor Aceste apeluri se mai numesc si macroinstructiuni Sintaxa: nume aarg1aarg2....aargni...iunde: nume - este numele macro anterior definita arg1...argn - valorile aferente param.fictivi din definire macro, acestipar. fiind pozitionali. La intilnirea oricarui apel macro, asamblorul va expanda macro-ul,inlocuind linia de apel cu instructiunile care il compun. Macro-ul poate fiplasat oriunde in program, dar trebuie sa fie definit inainte de apel (spredeosebire de proceduri) Directiva LOCAL Se foloseste intr-un macro pentru a defini simbolurile din cadrulmacro-ui. Rolul ei este de a evita aparitia simbolurilor multiplu definite, laexpandarile repetate ale macro-ui. Sintaxa: LOCAL simbol1asimbol2.....i..isimbol1asimbol2..i..i - simboli locali macro-ui Macrodefinitiile REPT, IRP, IRPC 1. REPT expresie corp macro ENDM - permite repetarea grupului de instructiuni din interior la valoarea lacare este evaluata expresie 2. IRP parametru,<arg1a,arg2..i> corp macro ENDM - permite repetarea neconditionata a corpului macro pentru fiecareargument din lista care va inlocui "paramteru". Parantezele unghiulare suntobligatorii.Ex.: Push_reg MACRO reg Push reg ENDMpush_all_regs MACRO IRPreg,<ax,bx,cx,dx,si,di,bp,sp> push_reg reg ENDM 3. IRPC parametru,sir caractere corp macro ENDM Este similara cu IRP, numai ca "parametru" este inlocuit de fiecare liteardin sirul de caractere.Vom reveni la transmisia parametrilor unei proceduri, exemplificinddiferitele metode cu ajutorul macro, care vor prelua secventa de incarcare aparam. anterior apelului procedurii. 1. Transmiterea parametrilor prin registre .DATAADREZ DB ?; .CODE;LOAD MACRO P1,P2,PEX MOV AX,P1 ;incarc parametri valoare MOV CX,P2 MOV BX,PEX ;este o adresa ENDM;START: MOV AX,@DATA MOVDS,AX LOAD5,6,<OFFSET ADREZ> CALLSUB MOVAL,aBXi ;preiau rezultatul din ;loc.memorie ADREZ adresata de BX ;ref.completa-->nu mai tb.sa utilizez . ;operatorul PTRSUB: ADD AX,CX MOV aBXi,AX;depun rezultatul |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|