Áttekintés
A feltétel nélküli ugrásoknál a vezérlés a programban elhelyezett címkéhez kerül.
A címkéket a programban általában a C-hez hasonlóan a sor elejére írt címkenévvel helyezhetjük el, amelyet kettőspont követ.
A feltétel nélküli ugrásoknál a vezérlés a programban elhelyezett címkéhez kerül.
A címkéket a programban általában a C-hez hasonlóan a sor elejére írt címkenévvel helyezhetjük el, amelyet kettőspont követ.
A legegyszerűbb utasítás a JMP.
Szintaxisa:
JMP cimke
Hatására a vezérlés a megadott cimke paraméterre kerül.
pl.:
MOV EAX, 2
JMP oda ; Ugrás az "oda" cimkére
MOV EAX, 0 ; Ez az utasítás kimarad, hiszen átugrottuk
oda:
ADD EAX, 2
A fenti kódrészlet lefutása után az EAX értéke 4 lesz. A nullázó utasítás nem fut le, mivel átugrottuk.
A feltétel nélküli vezérlés átadásnak egy formája az eljáráshívás és a visszatérés.
Az eljáráshívás a CALL utasítással valósítható meg.
Szintaxisa:
CALL eljárásnév
A CALL hatására az EIP megnövelt értéke a verembe kerül mentésre, majd a a vezérlés átkerül az eljárás elejére.
A call Utasítás párja a RET, amely a visszatérést oldja meg.
Szintaxisa:
RET [n]
A RET utasítás a verem tetején levő értéket az EIP-be helyezi, ezzel visszaállítva az EIP korábbi értékét, és a vezérlést visszaadva a hívó helyére.
Opcionális paramétere egy érték. Az itt megadott darabszámú byte-ot eldobunk a verem tetejéről.
FONTOS!!!
A RET utasítást nem hagyjuk el az eljárás végéről. Ha nincs meg, akkor a processzor nem tér vissza, és az eljárás után memóriaterületben található számsorozatot hajtja végre programkód-ként.
Példa:
; ...
.code
; Eljaras, ami kinullazza az EAX-et
nullaz PROC
MOV EAX, 0
RET
nullaz ENDP
main PROC
; ...
CALL nullaz ; EAX kinullazasa
call WriteInt ; A kiirt ertek 0 lesz
;
Invoke Exitprocess 0
main ENDP
; ...