Neden Meclis İşlevi'nin ilk eylemi olarak push ebp
yapıyoruz?Montajda CALLEE'de neden "PUSH EBP" ve "MOV EBP, ESP" ler var?
Anlaşılan değişkenleri almak için mov edi, [ebp+8]
kullanın, ancak bizim esp
zaten Arayan işlevinin dönmek için işaret ediyor. mov edi, [esp+4]
ile geçirilen değişkenlere kolayca erişebilir veya Callee kayıtlarını ittiğimizde mov edi, [esp+16]
.
Peki, neden daha sonra işlevlerde yönetmek zorunda olduğunuz CPU'da (ebp
) ek kayıt var? yani
push ebp
mov ebp, esp
...
mov esp, ebp
pop ebp
Yapmak zorunda değilsiniz. Fonksiyonlar değişken uzunluklu diziler veya alloca() 'kullanmıyorsa, derleyiciler genellikle çerçeve işaretçisini atlarlar. – EOF
Olası çoğaltılabilir [Tam olarak temel işaretçi ve yığın işaretçisi nedir? Ne için işaret ediyorlar?] (Http://stackoverflow.com/questions/1395591/what-is-exactly-the-base-pointer-and-stack-pointer-to-what-do-they-point) –
Neden? Başlıkta bütün başlıklara "CALLEE" yazdınız mı? Arayan kişinin çağrı çerçevesinin bir parçası olarak neden yığın çerçevelerini oluşturduğunu merak ediyor musunuz? Bu başlık, başlık dışındaki metne bağlı olarak ses çıkarmaz. –