vineri, 8 iulie 2016

Apelul procedurilor şi revenirea din proceduri "asamblare".

 Apelul procedurilor şi revenirea din proceduri
Instrucţiunea CALL (Apel de procedură)
CALL nume_proc
CALL FAR PTR nume_proc
CALL NEAR PTR nume_proc
În primul caz, tipul apelului este dedus din tipul procedurii, iarîn celelalte este specificat explicit (FAR sau
NEAR). Tipul apelului trebuie să coincidă cu tipul procedurii şi cu tipul instrucţiunilor Return din interiorul
procedurii, altfel se ajunge la funcţionări defectuoase ale programului. În cazul unui apel de procedură de
tip NEAR, se salvează în stivă conţinutul registrului IP, care reprezintă adresa de revenire, iar apoi în IP se
încarcă adresa primei instrucţiuni din procedură. În cazul unui apel de tip FAR, se salvează în stivă CS:IP,
adresa completă de revenire (pe 32 de biţi), iar apoi în CS:IP se încarcă adresa primei instrucţiuni din
procedură.
Instrucţiunea RET (Return - Revenire din procedură)
RET
RETF
RETN
În primul caz, tipul tipul instrucţiunii este dedus din tipul procedurii. În cazul unei reveniri de tip NEAR, se
reface registrul IP din stivă, astfel se transferă controlul la instrucţiunea care urmează instrucţiunii CALL
care a provocat apelul procedurii. În cazul unei reveniri de tip FAR, se reface din stivă perechea de registre
CS:IP.
Instrucţiunea JMP (Jump - Salt)
 JMP tinta
 JMP SHORT PTR tinta
 JMP NEAR PTR tinta
 JMP FAR PTR tinta
În primul caz, tipul saltului este dedus din atributele expresiei care precizează ţinta. Ţinta specifică adresa
de salt şi poate fi o etichetă sau o expresie. Există trei tipuri de instrucţiuni de salt:
• SHORT - adresa ţintă se află la o adresă în domeniul [-127, +127] faţă de adresa instrucţiunii de salt;
• NEAR - adresa ţintă este în acelaşi segment de cod cu instrucţiunea de salt;
• FAR - adresa ţintă poate fi în alt segment de cod faţă de instrucţiunea de salt.

Niciun comentariu:

Trimiteți un comentariu