Programant aplicacions de 64 bits


Els sistemes operatius Windows de 64 bits fan servir la convenció fastcall per fer les crides a les funcions, és a dir, els quatre primers paràmeters es passen als registres Rcx, Rdx, R8 i R9, respectivament, i tots els paràmeters han de ser valors de 8 bytes (QWORD). Quan s'escriu un procediment de finestra de 64 bits, cal desar els esmentats quatre registres en els arguments corresponents (excepte per l'assemblador GoAsm), és a dir, Rcx al 1r. argument, Rdx al 2n. argument, R8 al 3r. argument i R9 al 4t. argument. La resta d'arguments, si n'hi ha més de quatre, es passen a través de la pila (stack).

wndMainProcedure Proc hWnd:QWORD, uMsg:QWORD, wParam:QWORD, lParam:QWORD
    Mov hWnd, Rcx  ;No és necessari per al GoAsm
    Mov uMsg, Rdx  ;No és necessari per al GoAsm
    Mov wParam, R8 ;No és necessari per al GoAsm
    Mov lParam, R9 ;No és necessari per al GoAsm

    Ret
wndMainProcedure EndP


NOTA: Observeu que les línies anteriors estan escrites amb la sintaxi del MASM. Si us plau tingueu en compte fer la conversió de sintaxi pertinent quan programeu amb altres assembladors.

Majoritàriament cal utilitzar els registres de 64 bits a les aplicacions (Rax, Rbx, Rcx, Rdx, etc.), i el registre Rsp (el punter de la pila) ha d'estar sempre aliniat a 16 bytes quan es crida una funció de l'API, altrament l'aplicació probablement es bloquejará. El millor que podeu fer per tal d'iniciar-vos en la programació de 64 bits, és mirar-vos a fons els exemples de 64 bits que s'inclouen amb l'Easy Code, i que es troben a la carpeta \EasyCode\Examples.

Hi ha algunes consideracions importants que cal tenir en compte quan s'escriu codi dins d'un procediment (o d'un frame amb la sintaxi del GOASM) de 64 bits:

Hi ha molt poc codi d'exemple de 64 bits a internet i és extremadament simple, o en alguns casos no funciona. Tot el suport per a 64 bits de l'Easy Code, es deu a l'incansable treball del meu bon amic Héctor A. Medina. Sense la seva ajuda, jo no hagués estat capaç de programar els exemples de 64 bits que s'inclouen amb l'Easy Code.

Tantmateix, malgrat la complexitat de la programació en 64 bits, us sorprendrà veure com l'Easy Code la fa molt més fàcil. Gràcies per utilitzar l'Easy Code i bona sort!