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

Smazaný obsah Přidaný obsah
Fabcde (diskusia | príspevky)
d \r - EOL v GAS
Fabcde (diskusia | príspevky)
dBez shrnutí editace
Riadok 21:
 
=== Hello, World! ===
Náš prvý program vypíše v príkazovom riadku krátky text a skončí.
 
'''Výpis 1''' HelloWorld.asm (Verzia pre NASM):<syntaxhighlight lang="nasm" line="1">
Riadok 72:
call ExitProcess
</syntaxhighlight>Program síce nealokuje miesto v zásobníku (shadow space, podrobnosti ďalej) tak ako to vyžaduje volacia konvencia Microsoft x64, napriek tomu sa dal zostaviť aj spustiť.
 
Kompilácia:<syntaxhighlight>
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 registri ECX) je exit code programu.
 
'''Výpis 2''' HelloWorld.s (Verzia pre GAS):<syntaxhighlight lang="gas" line="1">
Riadok 282:
 
=== Hello, World! v.2 ===
Program HelloWorld opravený v súlade s volacou konvenciou.
 
'''Výpis 3''' HelloWorld.asm (Verzia pre NASM):<syntaxhighlight lang="nasm" line="1">
Riadok 346:
</syntaxhighlight>inštrukciou<syntaxhighlight lang="nasm" line="1" start="47">
xor ecx, ecx ; 1. param _In_ UINT uExitCode UINT je 32 bit aj v 64 bitovom prostredi
</syntaxhighlight>Je to pokus o optimalizáciu kódu, kedže inštrukcia xor ecx,ecx tiež vynuluje obsah registra ECX, ale po preložení zaberá menej bajtov. Optimalizácia kódu je však dnes kvôli prúdovému spracovaniu inštrukcií ([[w:cs:Pipelining|pipelining]]), hypertredingu, cache pamäti, atď mimoriadne zložitá a vyžaduje hlboké znalosti. Spravidla dobrý kompilátor/optimalizátor jazyka C dokáže vytvoriť rýchlejší kód než hoci aj kratší ale neoptimalizovaný kód v jazyku symbolických adries.<ref>https://www.zive.cz/clanky/vyznejte-se-v-procesoru--velky-prehled-technologii/historie-procesoru-cache-a-skalarni-procesory/sc-3-a-147124-ch-66129/default.aspx#articleStart</ref><ref>http://frdsa.fri.uniza.sk/~janosik/Kniha/Prudove_sprac.html</ref><ref>https://forum.root.cz/index.php?topic=2388.0</ref>
 
'''Výpis 4''' HelloWorld.s (Verzia pre GAS):<syntaxhighlight lang="nasm" line="1">