Programovanie v assembleri vo Windows x64 (x86-64): Rozdiel medzi revíziami
Smazaný obsah Přidaný obsah
Revízia textu |
|||
Riadok 184:
=== Zásobník ===
<!-- pokracovat v revizii -->Zásobník (stack) je pamäťová štruktúra typu LIFO. Hardvérový zásobník je realizovaný priamo v operačnej pamäti, ako jedna súvislá oblasť, ku ktorej sa pristupuje pomocou inštrukcií procesora PUSH a POP. V ďalšom texte sa pod zásobníkom rozumie vždy hardvérový zásobník, nie nejaká jeho softvérová implementácia.
Zásobník sa zvykne používať na ukladanie lokálnych premenných, často aj na odovzdávanie argumentov podprogramu. Používa ho aj inštrukcia CALL, ktorá na vrchol zásobníka ukladá návratovú adresu z podprogramu, t.j. adresu inštrukcie nasledujúcej za inštrukciou CALL, t.j. hodnotu registra RIP než bola nahradená adresou začiatku podprogramu.
SUB RSP, 8
MOV [RSP], RAX
Riadok 194:
| |
+==============+
|
+--------------+
|
+--------------+ |
|
+--------------+ |
|
+--------------+ |
|
+--------------+ |
|
+--------------+ |
|
+--------------+ |
|
+==============+
| . | <- RSP (Vrchol zásobníka) pred
Riadok 214:
| . |
| . |
+==============+ <- Dno zásobníka
</syntaxhighlight>K dátam uloženým v zásobníku je možné stále pristupovať aj priamo, ako ku hocijakým iným dátam uloženým kdekoľvek v pamäti, napríklad pomocou relatívneho odkazu na vrchol zásobníka <code>MOV EAX, [RSP+4]</code>.
Řádek 221 ⟶ 220:
MOV RAX, [RSP]
ADD RSP, 8
</syntaxhighlight>Pamäť zásobníka mimo rozsahu vymedzenom registrom RSP je nestála (volatile) a môže ju prepísať OS alebo debuger. Pri ukladaní údajov
=== Microsoft x64 ===
|