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.
OBSERVACIONS:
Aquesta consideració es pot ignorar quan es treballa amb
el GoAsm i/o quan la crida es fa amb
ECInvoke.
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!