Document, comentariu, eseu, bacalaureat, liceu si facultate
Top documenteAdmitereTesteUtileContact
      
    


 


Ultimele referate adaugate

Adauga referat - poti sa ne ajuti cu un referat?

Politica de confidentialitate



Ultimele referate descarcare de pe site
  CREDITUL IPOTECAR PENTRU INVESTITII IMOBILIARE (economie)
  Comertul cu amanuntul (economie)
  IDENTIFICAREA CRIMINALISTICA (drept)
  Mecanismul motor, Biela, organe mobile proiect (diverse)
  O scrisoare pierduta (romana)
  O scrisoare pierduta (romana)
  Ion DRUTA (romana)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  Starea civila (geografie)
 

Ultimele referate cautate in site
   domnisoara hus
   legume
    istoria unui galban
   metanol
   recapitulare
   profitul
   caract
   comentariu liric
   radiolocatia
   praslea cel voinic si merele da aur
 
despre:
 
Proceduri, macrodefinitii - limbaj de asamblare
Colt dreapta
Vizite: ? Nota: ? Ce reprezinta? Intrebari si raspunsuri
 
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 ENDS




Fig.1 Apelarea si revenirea din procedura START 1 2 3 4 l9k13kk
Poate 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 . . ENDM unde: 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...i

unde: 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..i

simbol1asimbol2..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 ENDM

push_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

Acest mod de transmitere a parametrilor prezinta avantajul unui cod scurt,ca si al vitezei, dar si dezavantajul posibilitatii transmisiei unui numar micde parametri.2. Transmiterea parametrilor prin locatii fixe de memorie

.DATAVAL1 DB ?VAL2 DB ?VAL3 DB ?; .CODELOAD MACRO P1,P2, MOV VAL1,P1 ;incarc parametri valoare MOV VAL2,P2 ENDM;START: MOV AX,@DATA MOVDS,AX LOAD5,6 CALLSUB MOVAL,VAL3 ;preiau rezultatul din ;loc.memorie VAL3 .

SUB: MOVAL,VAL1 ADD AL,VAL2 MOV VAL3,AL;depun rezultatul RET

Metoda se utilizeaza in general cind am mai multi parametri de transmis.Avantajul consta in faptul ca utilizeaza un numar mic de registri, cu pretulunui cod mai lung datorita instructiunilor de lucru cu memoria. Variabileleimplicate in transfer se numesc si statice (fixe) deoarece tot timpul vor figasite la aceleasi locatii de memorie. 3. Transmiterea parametrilor prin stiva .DATAADREZ DB ?; .CODELOAD MACRO P1,P2,PEX PUSH P1 ;incarc parametri valoare PUSH P2 PUSH PEX ENDM;START: MOV AX,@DATA MOVDS,AX LOAD5,6,<OFFSET ADREZ> CALLSUB MOVAL,ADREZ ;preiau rezultatul din |--------| ;loc.memorie VAL3| P1 | . +8|--------| | P2 |SUB: PUSHBP +6|--------| MOVBP,SP | PEX | MOVAL,aBP+8i +4|--------| ADD AL,aBP+6i |IP (near| MOV aBP+4i,AL;depun rezultatul |--------| POPBP | BP | RET 6 ;descarc stiva SP->|--------|

4. Transmiterea parametrilor prin stiva in cazul utilizarii variabilelor localeprocedurii .DATAADREZ DB ?; .CODELOAD MACRO P1,P2,PEX PUSH P1 ;incarc parametri valoare PUSH P2 PUSH PEX ;adresa ENDM;START: MOV AX,@DATA MOVDS,AX LOAD5,6,<OFFSET ADREZ> CALLSUB MOVAL,ADREZ ;preiau rezultatul din |--------| ;loc.memorie VAL3| P1 | . +8|--------| | P2 |SUB: PUSHBP +6|--------| MOVBP,SP | PEX | SUBSP,2 ;sp.ptr.vb.locala | | MOVAL,aBP+8i +4|--------| MOVaBP-2i,AL | | ADD AL,aBP+6i |IP (near| MOV aBP+4i,AL ;depun rezultatul |--------| ADDSP,2 ;refac stiva | | POPBP | BP | RET 6 ;descarc stiva SP->|--------| |local | -2|--------| In cazul ultimelor 2 metode, variabilele implicate in transfer se mainumesc si dinamice deoarece pe parcursul executiei programului pot ocupadiferite zone de memorie functie de context (stare), fiind suficienta numaischimbarea registrului SP. Aceste ultime 2 metode sunt folosite decompilatoarele moderne la transmiterea parametrilor. Ultima metoda se utilizeaza des in cazul procedurilor recursive sau acelor reentrante.

Aplicatii:

1. Analizati programul SOUND.ASM. Modificati-l astfel incit sa contina:- procedura programare timer pe o anumita nota muzicala, parametriitransmisi fiind adresa tabelului TABW, si indexul in acest tabel al noteirespective ; parametrii vor fi transmisi prin stiva ;- procedura temporizare, folosind ca parametru continutul din SI si obucla de temporizare LOOP ;- programul principal va contine apelul acestor rutine cu anumite notemuzicale si diferite temporizari.

2. Urmaririti programul SMIN.ASM, care calculeaza minimul unui sir de octeti.Veti adauga instructiunile pentru calculul maximului aceluiasi sir, apoi veticalcula suma intre minim si maxim. Veti furniza macro-ului alti trei parametri:

1. adresa rutinei de calcul (minim/maxim) 2. adresa variabilei de memorie care imi pastreaza minimul/maximul 3. valoarea initiala pentru calculul minim/maxim-ului

Suma intre minim si maxim se va face in programul principal !! Toate acestea le veti face folosind transferul parametrilor atƒt prinregistri si zone fixe de memorie ca in exemplul dat, cit si prin stiva, caz incare trebuie sa fiti atenti la secventa de incarcare a parametrilor.


Colt dreapta
Creeaza cont
Comentarii:

Nu ai gasit ce cautai? Crezi ca ceva ne lipseste? Lasa-ti comentariul si incercam sa te ajutam.
Esti satisfacut de calitarea acestui document, eseu, cometariu? Apreciem aprecierile voastre.

Nume (obligatoriu):

Email (obligatoriu, nu va fi publicat):

Site URL (optional):


Comentariile tale: (NO HTML)


Noteaza documentul:
In prezent fisierul este notat cu: ? (media unui numar de ? de note primite).

2345678910

 
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite
Colt dreapta