Programovanie v assembleri vo Windows x64 (x86-64): Rozdiel medzi revíziami

Smazaný obsah Přidaný obsah
d Preklep: "v registry" nahradené "v registri"
Značky: vizuálny editor úprava z mobilu úprava z mobilného webu
d Opravené preklepy "v registry" na "v registri".
Značky: vizuálny editor úprava z mobilu úprava z mobilného webu
Riadok 127:
mov ecx, 0 ; 1. param _In_ UINT uExitCode UINT je 32 bit aj v 64 bitovom prostredi
call ExitProcess
</syntaxhighlight>vynuluje obsah registra ECX a ukončí program. Jediným argumentom funkcie ExitProcess (uložený v registryregistri ECX) je exit code programu.
 
'''Výpis 2''' HelloWorld.s (Verzia pre GAS):<syntaxhighlight lang="gas" line="1">
Riadok 241:
64-bitové verzie funkcií WindowsAPI používajú volaciu konvenciu Microsoft x64.
 
Prvé štyri argumenty sú uložené v registroch (64-bitová architektúra x86-64 má oproti 32-bitovej architektúre x86 k dispozícii viac registrov). V prípade celočíselných hodnôt (vrátane ukazovateľov), v RCX, RDX, R8 a R9 (v tomto poradí), v prípade argumentov s pohyblivou desatinnou čiarkou v XMM0, XMM1, XMM2, XMM3. Prvý argument je teda uložený buď v registryregistri RCX alebo v XMM0, druhý v RDX alebo v XMM1, tretí v R8 alebo v XMM2, štvrtý v R9 alebo v XMM3. Parametre menšie než 64 bitov ignorujú vyššie bity, netreba ich nulovať. Napríklad prvý parameter typu integer (aj v x86-64 je to 32 bitové celé číslo) stačí uložiť do ECX.
 
Ďalšie argumenty sa ukladajú do zásobníka v poradí sprava doľava, rovnako ako pri stdcall.
Riadok 340:
</syntaxhighlight>Piaty argument potom samozrejme nie je možné vložiť na požadovanú pozíciu inštrukciou PUSH, ale:<syntaxhighlight lang="nasm" line="1" start="42">
mov qword [rsp+20h], 0 ; 5. param _Inout_opt_ LPOVERLAPPED lpOverlapped
</syntaxhighlight>ZinštásobníkZásobník je pripravený aj pre funkciu ExitProcess, stačí ju zavolať a až potom uvoľniť rezervované miesto:<syntaxhighlight lang="nasm" line="1" start="50">
add rsp, 28h ; uvolnenie rezervovaneho miesta
</syntaxhighlight>Poslednou zmenou je nahradenie inštrukcie<syntaxhighlight lang="nasm" line="1" start="46">