CallR / RetR / CallRA / RetRA (només projectes ASMC, JWASM, MASM, POASM i UASM de 64 bits)
Atés
que el compilador MASM
de 64 bits (ml64) no suporta la
instrucció Retn,
l'Héctor A.
Medina ha desenvolupat quatre pseudo-opcodes
inclosos
a l'Easy Code, CallR,
RetR,
CallRA
i
RetRA,
que funcionen igual que Call
i Retn.
Aquests pseudo-opcodes s'utilitzen de la
següent manera:
wndMainProcedure Proc
hWnd:QWORD,
uMsg:QWORD,
wParam:QWORD,
lParam:QWORD
Mov
hWnd, Rcx
Mov
uMsg, Rdx
Mov
wParam, R8
Mov
lParam, R9
CallR
Label
;RetR
retorna aquí
Ret
Label:
RetR
wndMainProcedure EndP
A més, CallR
i CallRA
accepten un segon argument OPCIONAL com a
adreça de retorn:
wndMainProcedure Proc
hWnd:QWORD,
uMsg:QWORD,
wParam:QWORD,
lParam:QWORD
Mov
hWnd, Rcx
Mov
uMsg, Rdx
Mov
wParam, R8
Mov
lParam, R9
CallR
Label, RetAddr
;Línia
de codi
;Línia
de codi
RetAddr:
;RetR
retorna aquí
Ret
Label:
RetR
wndMainProcedure EndP
L’exemple de 64 bits ECClock per a MASM,
a la carpeta EasyCode\Examples\Masm\x64,
fa servir CallR
i RetR.
IMPORTANT: En els exemples
anteriors, es pot utilitzar CallR
/ RetR
o CallRA
/
RetRA
indistintament, però
cal tenir en compte que CallRA
/
RetRA
mantenen l'aliniació de la
pila, mentre que CallR
/
RetR
NO.
AVÍS: RetR i RetRA modifiquen el registre Rax.
OBSERVACIONS: CallR,
RetR,
CallRA
i
RetRA
només estan disponibles per als
projectes ASMC, JWASM, MASM, POASM i UASM de 64 bits. Tot i que els
compiladors de 64 bits ASMC, JWASM, POASM i UASM suporten
la instrucció Retn,
CallR,
RetR,
CallRA
i RetRA
també estan disponibles com
a complement.