30
10.06.22 Universitatea "1 Decembrie 1918" Alb a Iulia 1 Instrucţiunile Instrucţiunile comune ale comune ale familiei de familiei de microprocesoare microprocesoare INTEL 80X86 INTEL 80X86 (Cursul 3) (Cursul 3)

Cursul 3 Instructiuni

Embed Size (px)

Citation preview

Page 1: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia1

Instrucţiunile comune Instrucţiunile comune ale familiei de ale familiei de

microprocesoare microprocesoare INTEL 80X86 INTEL 80X86

(Cursul 3)(Cursul 3)

Page 2: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia2

IntroducereIntroducere Subiectele prelegerii: În cursul anterior operaţiile de bază ale unui sistem cu

microprocesor au fost prezentate cu accent pe înregistrarea şi adresarea memoriei interne

Pe parcursul acestui curs vom vedea mai multe detalii, de la maniera în care utilizatorul este capabil să utilizeze sistemul de programare al microprocesorului, până satisfacerea dorinţei de utilizare a întregului set de instrucţiuni al CPU

Fiecare CPU are un set de bază de instrucţiuni cod maşină care implementează un set de operaţii logice care se doresc a fi executate

Page 3: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia3

IntroducereIntroducere Subiectele prelegerii: Familia de microprocesoare INTEL 80X86 suportă un set

foarte larg de instrucţiuni, unele relativ complexe, în consecinţă sunt privite ca CISC (Complex Instruction Set Computer) spre deosebire de microprocesoarele RISC (Reduced Instruction Set Computer)

Pe parcursul acestui curs (la fel ca şi în cursul general) noi vom opri doar asupra unui subset de instrucţiuni aflate la dispoziţie

Totuşi, o data învăţate aceste instrucţiuni pot deveni elementele de bază în conceperea şi realizare unor exemple simple de programe în limbaj de asamblare

Page 4: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia4

Instrucţiuni Assembler comune Instrucţiuni Assembler comune Formatul instrucţiunilor Assembler Formatul poate varia depinzând de utilizarea particulară a

instrucţiunilor, totuşi, în general instrucţiunile sunt prezentate în următoarea formă:

Instrucţiune Registru/Dată, Registru/DatăExemplu: MOV AX,51h

La compilare asamblorul transformă instrucţiunile în echivalentul binar al instrucţiunilor cod maşină, care sunt între 1 şi 6 octeţi lungime

Aceste instrucţiuni în cod binar sunt de nediferenţiat de datele binare aflate în memorie, de aceia cade în sarcina utilizatorului să se asigure că CPU execută instrucţiuni din program

Page 5: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia5

Instrucţiuni Assembler comune Instrucţiuni Assembler comune Instrucţiunea de transfer (MOV)          Instrucţiunea MOV este utilizată pentru transferul

(copierea) unui element individual de dată din spaţiul de adrese al familiei 80X86 şi este cea mai comună instrucţiune

         Elementul de dată poate fi transferat între două registre, între o zonă de memorie şi un registru (regreg, memreg şi reg mem) sau a dată imediată, atragem atenţia că nu se pot face transferuri memmem (un astfel de transfer se poate face prin doua instrucţiuni de transfer, una memreg şi una reg mem)

         Formatul de bază al instrucţiunii este:

MOV <Size> reg/mem, <Size> reg/mem

Page 6: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia6

Instrucţiuni Assembler comune Instrucţiuni Assembler comune Instrucţiunea de transfer (MOV) Se utilizează la: -         Încărcarea registrelor cu date sau pointeri de adrese, -         Memorarea valorilor în zone specificate din memorie, -         Memorarea rezultatelor în memorie, -         Setarea parametrilor pentru întreruperi şi bucle, -         Copierea şirurilor în memoria video etc.Exemple: MOV AX,0B800h

MOV CL,NumeMOV SI,offset SubnumeMOV ES,AXMOV DS,AXMOV AH,[BX+05]MOV byte ptr TEST,45h

Page 7: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia7

Instrucţiuni Assembler comune Instrucţiuni Assembler comune Instrucţiunea de interschimb (XCHG) Instrucţiunea XCHG poate fi utilizată pentru interschimbarea

datelor, în trei formate:

XCHG reg Interschimbă conţinutul lui reg cu cel al registrului AXExemplu: XCHG BP ; Execută swaps AX BP

XCHG reg1,reg2 Interschimbă conţinutul lui reg1 cu cel al registrului reg2Exemplu: XCHG SI,DI ; Execută swaps SI DI XCHG ES,DS ; Execută swaps ES DS

XCHG reg,mem Interschimbă conţinutul lui reg cu cel conţinut în memExemplu: XCHG DX,Data1 ; Execută swaps DX

Data1

Page 8: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia8

Instrucţiuni aritmetice Instrucţiuni aritmetice Instrucţiunile INC/DEC Instrucţiunile INC/DEC au două moduri de operare :

INC/DEC reg Incrementează sau decrementează pe reg cu unu (dacă dă zero

atunci ZF=1)Exemple:INC SI ; (SI) = (SI) + 1

DEC DI ; (DI) = (DI) – 1INC/DEC mem

Incrementează sau decrementează conţinutul locaţiei mem cu unu (dacă dă zero atunci ZF=1)

Exemple: INC byte ptr Data1 ; Incrementează octetul Data1 cu 1 DEC word ptr Data2 ; Consideră Data2 & Data2 + 1

ca; o valoare pe cuvânt şi pe care; o decrementează cu 1

Page 9: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia9

Instrucţiuni aritmetice Instrucţiuni aritmetice Instrucţiunea de adunare (ADD) Instrucţiunea ADD are de asemenea u mod strict de operare : Notă: Instrucţiunea următoare ADD X,Y furnizează

rezultatul în X

ADD reg,dataExemple:ADD AL,55h ; Rezultatul în AL

ADD AX,7E45h ; Rezultatul în AXADD BX,0140h ; Rezultatul în BX

ADD mem,dataExemplu:

ADD word ptr Data1,0077h ; Rezultatul în cuvântul din Data1

ADD reg,memExemplu: ADD CX,Data1 ; Rezultatul în CX

Page 10: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia10

Instrucţiuni aritmetice Instrucţiuni aritmetice Instrucţiunea de adunare (ADD)

ADD mem,regExemplu: ADD Data1,AL ; Rezultatul în octetul din Data1

ADD reg,regExemple:ADD DX,CX ; Rezultatul în DX

ADD CH,BL ; Rezultatul în CHADD AL,AH ; Rezultatul în AL

Notă: Nu este posibilă efectuarea unei adunări între două zone de memorie:

ADD Data1,Data2 Este o ilegal instruction

CPU trebuie să utilizeze un registru la instrucţiunea de adunare

Page 11: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia11

Instrucţiuni aritmetice Instrucţiuni aritmetice Instrucţiunea de împărţire (DIV) Are două moduri de operare: modul pe 8 sau 16 biţi

DIV reg modul pe 8 biţi Împarte conţinutul lui AX la reg modul pe 16 biţi Împarte conţinutul registrului dublu AX:DX

la reg În modul pe 8 biţi:

DIV BL ; Rezultatul în: AL = Câtul şi AH = RestulExemplu:

MOV BL,03 ; Mută valoarea 03 în BLMOV AX,07 ; Mută valoarea 07 în AXDIV BL ; Împarte conţinutul lui AX cu conţinutul lui BL şi

; rezultatul se obţine în AX astfel: AH = 01 şi AL = 02

Page 12: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia12

Instrucţiuni aritmetice Instrucţiuni aritmetice Instrucţiunea de împărţire (DIV) În modul pe 16 biţi:

DIV CX ; Conţinutul registrului dublu DX:AX se împarte la CX ; Rezultatul în: AX = Câtul şi DX = Restul

Exemplu:MOV AX,41252 ; Mută valoarea 41252 în AXMOV DX,07 ; Mută valoarea 07 în DXMOV CX,50000 ; Mută valoarea 50000 în CXDIV CX ; Împarte conţinutul registrului dublu

; DX:AX cu conţinutul lui CX şi ; rezultatul se obţine în registrul dublu ; DX:AX astfel: AX = 000A şi ; restul DX = 0004

Notă: Este o împărţire întreagă, pentru împărţire fracţionară se utilizează aritmetica în virgulă mobilă

Page 13: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia13

Instrucţiuni aritmetice Instrucţiuni aritmetice Instrucţiunea de înmulţire (MUL) Are două moduri de operare: modul pe 8 sau 16 biţi

MUL reg modul pe 8 biţi Înmulţeşte conţinutul lui AL cu reg şi da

rezultatul în AX modul pe 16 biţi Înmulţeşte conţinutul registrului AX cu reg

şi dă rezultatul în registrul dublu DX:AX În modul pe 8 biţi:

MUL DL ; Rezultatul în AX = AL x DL (sau în AL dacă; nu-i peste un octet)

Exemplu:MOV DL,02 ; Mută valoarea 02 în DLMOV AL,04 ; Mută valoarea 04 în ALMUL DL ; Înmulţeşte conţinutul lui AL cu conţinutul

; lui DL şi rezultatul se obţine în AL = 08

Page 14: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia14

Instrucţiuni aritmetice Instrucţiuni aritmetice Instrucţiunea de înmulţire (MUL) În modul pe 16 biţi (N.B. 16 biţi x 16 biţi = 32 biţi rezultatul):

MUL CX ; Rezultatul în registrul dublu DX:AXExemplu:

MOV CX,1020h ; Mută valoarea 1020h în CX (Înmulţitorul)MOV AX,0203h ; Mută valoarea 0203h în AX (De înmulţitul)MUL CX ; Rezultatul în DX:AX = AX x CXMOV JosData,AX ; Culege în JosData val. low a rezultatuluiMOV SusData,DX ; Culege în SusData val. high a rezultatului

; Rezultatul este : 00207060h

Page 15: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia15

Instrucţiuni logice Instrucţiuni logice Instrucţiunile şi/sau (AND/OR) Ambele au patru moduri diferite de operare: 

AND/OR reg,data ; Rezultatul în regExemplu: AND AX,0302h ; Execută SI logic între AX şi

; valoarea 0302h, rezultatul în AX AND/OR mem,reg ; Rezultatul în mem

Exemplu: OR Data1,CL ; Execută SAU logic între Data1 şi ; conţinutul registrului CL iar rezultatul este dat în Data1 AND/OR reg,mem ; Rezultatul în reg

Exemplu: AND BX,Data1 ; Execută SI logic între BX şi ; valoarea din Data1 şi rezultatul se dă

BXAND/OR reg1,reg2 ; Rezultatul în reg1

Exemplu: OR DH,CL ; Execută SAU logic între DH şi ; conţinutul registrului CL iar rezultatul este dat în DH

Page 16: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia16

Instrucţiuni logice Instrucţiuni logice Instrucţiunile şi/sau (AND/OR) Instrucţiunea AND poate fi folosită pentru ştergeri particulare de

biţi (mascări de biţi, eliminarea cu ajutorul măştilor a biţilor nedoriţi)

Ex: MOV AL,45h ; Mută val. 45h, adică ‘0100 0101’ b. în AL AND AL,0Fh ; Execută un SI logic între conţinutul ; registrului AL şi 0Fh adică ‘0000 1111’ binar (masca) şi AL va ; conţine după operaţie valoarea binară ‘0000 0101’ adică 05h  Similar, instrucţiunea OR poate fi folosită pentru setări

particulare de biţi (introducerea cu ajutorul măştilor a biţilor necesari)

Ex: MOV CH,05h ; Mută val.05h adică ‘0000 0101’ b.în CHOR CH,30h ; Execută un SAU logic între conţinutul reg. CH şi

; 30h adică ‘0011 0000’ binar (masca) şi CH va conţine după ; operaţie valoarea binară ‘0011 0101’ adică 35h şi care ; corespunde codului ASCII al caracterului afişabil ‘5’

Page 17: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia17

Instrucţiuni de manipulare a biţilorInstrucţiuni de manipulare a biţilor Instrucţiuni de deplasare şi rotaţii (SHL, ROL, …) Au două moduri de operare:

SHL/SHR/ROL/ROR reg/mem,1(Shift Left/Shift Right/Rotate Left/Rotate Right cu un bit)Ex: MOV AL,19h ; AL = 0001 1001 binar

SHL AL,1 ; AL = 0011 0010 binar = 32h = 19h x 2ROR AL,1 ; AL = 0001 1001 binar

SHL/SHR/ROL/ROR reg/mem,CL(Shift Left/Shift Right/Rotate Left/Rotate Right cu un CL biţi)Ex: MOV AL,19h ; AL = 0001 1001 binar

MOV CL,02 ; Valoarea contorului CL = 02hSHR AL,CL ; AL = 0000 0110 binar = 06h = 19h / 4ROL AL,CL ; AL = 0001 1000 binar

Page 18: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia18

Instrucţiuni de manipulare a biţilorInstrucţiuni de manipulare a biţilor Instrucţiuni de rotaţii cu Carry (RCL,RCR) Au două moduri de operare:

RCL/RCR reg/mem,1(Rotate Left utilizând Carry/Rotate Right utilizând CF cu 1 bit) 

RCL/RCR reg/mem,CL(Rotate Left utilizând Carry/Rotate Right utiliz. CF cu CL biţi)Ex: MOV AL,19h ; AL = 0001 1001 binar MOV CL,02; Valoarea contorului CL = 02h RCL AL,1 ; AL = 0011 0011 binar, CF = 0 RCR AL,CL ; AL = 1000 1100 binar, CF = 1

Page 19: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia19

Instrucţiunile de comparare şi Test Instrucţiunile de comparare şi Test Instrucţiunea de comparare (CMP) Se utiliz. pentru compararea a 2operanzi care au aceiaşi lungime Nici unul din operanzii aflaţi în locaţii nu sunt afectaţi de

operaţia de comparare Instrucţiunea CMP AA,BB execută o pseudo scădere a lui BB

din AA şi setează indicatorii CF, ZF, SF şi PF ca şi când o instrucţiune SUB s-ar fi efectuat, astfel încât salturile condiţionale pot fi realizate bazându-se pe rezultatele din indicatorii de condiţii

Page 20: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia20

Instrucţiunile de comparare şi Test Instrucţiunile de comparare şi Test Instrucţiunea de comparare (CMP) Are 4 moduri de operare:CMP reg,data CMP mem,regCMP reg,mem CMP reg,regEx: Pentru cel mai întâlnit caz (utilizând ZF)

MOV AX,Data1 ; Culege Data1 în registrul AXCMP AX,0303h ; Compară conţinutul lui AX cu val. 0303hJZ Eticheta1 ; DA: Dacă sunt egale salt la Eticheta1 MOV CX,0FFFFh; NU: Dacă nu se execută următ. instrucţiuneJMP Eticheta2 ; Salt necondiţionat la Eticheta2…………………………

Eticheta1: MOV CX,0AAAAh ; Mută valoarea AAAAh în CX…………………………

Eticheta2: ………………………… (Restul programului)

Page 21: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia21

Instrucţiunile de comparare şi Test Instrucţiunile de comparare şi Test Instrucţiunea de testare (TEST) Execută o operaţie AND pentru a determina dacă anumiţi biţi

dintr-un registru sunt setaţi pe 1 La fel ca şi la operaţiunea de comparare, datele din registrul în

care se află operandul, nu sunt afectate de operaţia AND ci numai indicatorii de condiţii SF, ZF sau OF sunt afectaţi (de asemenea OF şi CF sunt totdeauna resetaţi la zero)

Un singur mod: TESTreg/data Ex: MOV AX,13ACH ; AX = 0001 0011 1010 1100 binar TEST AX,0040h ; Se compară conţinutul lui AX cu

val.; bin. 0000 0000 0100 0000 (făra a se afecta conţinutul lui AX); Rezultatul lui AND ar fi 0000 0000 0000 0000 şi ; după operaţia de TEST avem poziţionaţi indicatorii; de condiţii astfel: SF = 0, PF = 1, ZF = 1

Page 22: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia22

Instrucţiuni pe şiruri de caractere Instrucţiuni pe şiruri de caractere Instrucţiuni de transfer al şirurilor (LODS, STOS, …) Utilizate pentru transferul blocurilor de date dintr-o zonă de

memorie RAM într-altaLODSB/W

LODSB încarcă un octet (byte) al unei date aflate la adresa de memorie dată de DS:SI în registrul AH şi incrementează sau decrementează conţinutul registrului SI cu valoarea 1, depinzând de valoare indicatorului de condiţii DF (dacă DF = 0 (CLD) atunci se incrementează SI, iar dacă DF = 1 (STD) atunci se decrementează SI)

LODSW încarcă un cuvânt (word) al unei date aflate la adresa de memorie dată de DS:SI (primul octet al cuvântului) şi DS:SI+1(al doilea octet al cuvântului) în registrul AX şi incrementează sau decrementează conţinutul registrului SI cu valoarea 2, depinzând de valoare indicatorului de condiţii DF (dacă DF = 0 (CLD) atunci se incrementează SI, iar dacă DF = 1 (STD) atunci se decrementează SI)

Page 23: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia23

Instrucţiuni pe şiruri de caractere Instrucţiuni pe şiruri de caractere Instrucţiuni de transfer al şirurilor (LODS, STOS, …) STOSB/W STOSB stochează octetul (byte) din registrul AH într-o

zonă de memorie aflată la adresa de memorie dată de ES:DI şi incrementează sau decrementează conţinutul registrului DI cu valoarea 1, depinzând de valoare indicatorului de condiţii DF (dacă DF = 0 (CLD) atunci se incrementează DI, iar dacă DF = 1 (STD) atunci se decrementează DI)

STOSW stochează cuvântul (word) din registrul AX într-o zonă de memorie aflată la adresa de memorie dată de ES:DI (primul octet al cuvântului) şi ES:DI+1(al doilea octet al cuvântului) şi incrementează sau decrementează conţinutul registrului DI cu valoarea 2, depinzând de valoare indicatorului de condiţii DF (dacă DF = 0 (CLD) atunci se incrementează DI, iar dacă DF = 1 (STD) atunci se decrementează DI)

Page 24: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia24

Instrucţiuni pe şiruri de caractere Instrucţiuni pe şiruri de caractere MOVSB/W MOVSB copiază un octet (byte) al unei date aflate la adresa de

mem.dată de DS:SI într-o altă zonă de date a cărei adresă este dată de ES:DI şi incrementează sau decrementează conţinutul reg. SI şi DI cu valoarea 1, depinzând de valoare indicatorului de condiţii DF (dacă DF = 0 (CLD) atunci se incrementează SI şi DI, iar dacă DF = 1 (STD) atunci se decrementează SI şi DI)

MOVSW copiază un cuvânt (word) al unei date aflate la adresa de mem. dată de DS:SI (primul octet al cuvântului) şi DS:SI+1 (al doilea octet al cuvântului) într-o altă zonă de date a cărei adr. este dată de ES:DI (primul octet al cuv.) şi ES:DI+1(al doilea octet al cuv.) şi incrementează sau decrementează conţinutul reg. SI şi DI cu val. 2, depinzând de val. indicatorului de condiţii DF (dacă DF = 0 (CLD) atunci se incrementează SI şi DI, iar dacă DF = 1 (STD) atunci se decrementează SI şi DI)

În mod curent aceste instrucţiuni se folosesc alături de instrucţ. LOOP sau REP, de exemplu pentru copierea unor şiruri ASCII în memoria video RAM la afişarea mesajelor

Page 25: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia25

Instrucţiuni iterative Instrucţiuni iterative Instrucţiunea de repetare (REP) Se foloseşte pentru a repeta un şir de instrucţiuni de CX ori Exemple: REP LODSB sau REP LODSW

REP STOSB sau REP STOSW REP MOVSB sau REP MOVSW

CX este decrementat de fiecare când se execută şirul de instrucţiuni şi odată ce CX ajunge să conţină valoarea 0 (ZF = 1) repetarea este abandonată şi programul continuă în secvenţă

De exemplu, pentru copierea a 10 caractere din Text1 în Text2: MOV SI, offset Text1; Culege adr. Rel. a lui Text1 în reg. SI MOV DI, offset Text2 ; Culege adr. Rel. a lui Text2 în reg. DI MOV CX, 10 ; Încarcă numărul de repetări (10 octeţi) REP MOVSB ; Copiere 10 octeţi de la DS:SI la ES:DI

Page 26: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia26

Instrucţiuni iterative Instrucţiuni iterative Instrucţiunea de buclare (LOOP) Se fol. pentru a exec. într-un ciclu un set de instrucţ. de CX ori Ca şi la instrucţiunea REP, conţinutul registrului CX este

decrementat de fiecare când se execută în mod ciclic setul de instrucţiuni şi odată ce CX ajunge să conţină valoarea 0 (ZF = 1) se iese din ciclu şi programul continuă în secvenţă

Dacă este nevoie ca registrul CX să fie utilizat în corpul ciclului (în setul de instrucţiuni care trebuie repetat) atunci conţinutul registrului CX trebuie salvat în stivă:

MOV CX,10 ; Încarcă numărul de ciclări

Ciclu: PUSH CX ; Salv. conţinutul contorului de ciclare în stivăMOV CX,5000h ; Se utilizează reg. CX în alte scopuri

; în ciclu (CX se alterează)CALL IesireMON ; Apelul procedurii IesireMON POP CX ; Reface conţ. contorului CX (necesar ciclării)

LOOP Ciclu ; Repetă bucla de 10 ori

Page 27: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia27

Instrucţiuni specifice stivei Instrucţiuni specifice stivei Instrucţiunile de încărcare&descărcare a stivei (PUSH, POP) Se fol. pentru copierea datelor la nivel de registru în şi din stivă

PUSH reg - copierea conţinutului registrului reg în vârful stivei (încărcare (salvare) în stivă)

POP reg - copierea valorii din vârful stivei în registrul reg (descărcare (restaurare) din stivă)

Aceste operaţii se pot efectua pe 8 sau 16 biţiPUSH AH ; Salvarea octetului hight din AX în stivăPOP BX ; Descărcarea unei valori de 16 biţi din vârful

; stivei în registrul BX Notă: Trebuie să fim totdeauna atenţi la salvările şi restaurările

din stivă, deoarece restaurările se fac în ordine inversă a salvărilor

Page 28: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia28

Instrucţiuni specifice stivei Instrucţiuni specifice stivei Instrucţiunile de încărcare şi descărcare a stivei (PUSH, POP) Când se utilizează apelul unei proceduri cu CALL:

Page 29: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia29

Instrucţiuni specifice stivei Instrucţiuni specifice stivei Instrucţiunile de încărcare şi descărcare a stivei (PUSH, POP)

Dacă instrucţiunea POP AX nu a fost dusă la îndeplinire (fie s-a efectuat un salt peste ea, fie a uitat-o programatorul s-o introducă) în cadrul procedurii apelate, atunci instrucţiunea RET iniţiază un salt la adresa indicată de conţinutul lui AX (conţinut interpretat drept IP)

Evident, acest lucru trebuie evitat (în afară de cazul când este făcut în mod deliberat, de programator, cu un scop precis) deoarece poate duce la blocaje de sistem

Page 30: Cursul 3 Instructiuni

12.04.23Universitatea "1 Decembrie 1918" Alba Iulia30