CallR / RetR (només projectes JWASM, MASM i POASM 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 dos pseudo-opcodes inclosos a l'Easy Code, CallR i RetR, que funcionen igual que Call i Retn respectivament. 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 accepta 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.


AVÍS: RetR modifica el registre Rax.

OBSERVACIONS: CallR i RetR només estan disponibles per als projectes JWASM, MASM i POASM de 64 bits. Tot i que els compiladors de 64 bits JWASM i POASM sí que suporten la instrucció Retn, CallR i RetR també estan disponibles com a complement.