8 - Functions in C and the call stack
Optimizasyon açıkçsa inline keyword olmasa bile derleyici inline yapabilir.
ARM’da return adresi LR, R14 registerında saklanıyor.
SP, R13 stack’ı gösteriyor. C stack’in hardware implementasyonu.
SP top of stack gösteriyor. ARM’da stack BÜYÜDÜKÇE, DÜŞÜK adreslere
gidiyoruz. Stack KÜÇÜLDÜKÇE, YÜKSEK adreslere gidiyoruz. Başka işlemcilerde
farklı yönde olabilir.
Bir fonksiyona girince SP, 4 azaltılıyorsa stack 4 byte büyütüldü demektir.
Yani aslında 4 byte için yer ayırıyor. Sonra SPye STR ile stor edince
bu yeni alan kullanılıyor. Fonksiyondan dönerken ise SP 4 arttırılıyor yani
restore ediliyor.
Stack’e PUSH edince otomatik olarak adresi de değişiyor ve değer depolanıyor.
Bu hem otomatik hem de atomik oluyor.
Stack’in iki amacı var:
Lokal değişkenleri tutmak
Return adresleri tutmak
Yaptığımız örnekte bir fonksiyona argüman geçirince bunu stack ile değil, R0
ile geçirdi mesela.