12: Smalamál - stef Flashcards
x86-64 Hlaðinn
Svæði í minni sem
unnið er með eins og
hlaða (stack
Gistið %rsp inniheldur
lægsta vistfang staflans
-Vistfang “efsta” staksins
pushq Src
– Ná í viðfang í Src
– Lækka %rsp um 8
– Skrifa viðfang í vistfang sem er í
%rsp
popq Dest
-Lesa gildi úr vistfangi sem er í
%rsp
– Hækka %rsp um 8
– Skrifa gildi í Dest (oftast gisti
Innihald minnisins breytist
ekki, aðeins gildið í %rsp
Stýriflæði stefja (control flow)
Notum hlaða til að útfæra kall á stef og endurkomu
call label
Kall á stef:
– Setja (push) endurkomuvistfang á hlaða
– Stökkva í label
Endurkomuvistfang (return address):
– Vistfang næstu skipunar á eftir call-skipun
– Dæmi úr afsmöluðum kóða
Endurkoma úr stefi: ret
– Taka (pop) vistfang af hlaða
– Stökkva í vistfang (reyndar: setja vistfangið í %rip)
Gagnaflutingur í stefjum
- Fyrstu 6 viðföng í gisti :
%rdi
%rsi
%rdx
%rcx
%r8
%r9
Skilagildi fer alltaf í ?
%rax
Hvaða viðfang fer á hlaða ?
Hlaði aðeins notaður þegar
þess er þörf
– Þegar fjöldi viðfanga > 6
Þannig að 7unda viðfang fer á hlaðann
Forritunarmál sem byggja á hlaða
Forritunarmál sem styðja endurkvæmni (recursion),
Hlaðaramma innihalda ?
– Endurkomu upplýsingar
– Staðværar breytur (ef þörf)
– Tímabundnar breytur (ef þörf)
rpb
Rammabendir
(Ekki alltaf notaður)
rsp
Hlaðabendir: