什么叫棧幀?
就是函數(shù)的調(diào)用環(huán)境。bp和sp中間那一段就是函數(shù)調(diào)用環(huán)境。

8086相關(guān)的
在AT&T環(huán)境下棧幀是有點(diǎn)不一樣的:
1、葉子函數(shù)不會(huì)開(kāi)辟空間(即減rsp)給局部變量。


葉子函數(shù)

sp不減
葉子函數(shù):sp往上走128個(gè)字節(jié)都是他的區(qū)域"red zone"紅色區(qū)域,受保護(hù)的。
2、非葉子函數(shù)才會(huì)開(kāi)辟空間。

image.png

image.png
3、總結(jié)
為什么葉子函數(shù)不用做sp減的操作,來(lái)開(kāi)辟一段受保護(hù)的空間?
——因?yàn)槿~子函數(shù),能保證不會(huì)再調(diào)用別的函數(shù),能保證堆棧不會(huì)被其他函數(shù)破壞。所以可以隨便往里面放東西。所以sp減不減都可以放東西??扇~子函數(shù)的sp為什么不上去呢?
——為性能考慮。

為性能考慮
上部分葉子函數(shù)sp不減;下部分非葉子函數(shù)sp減,減了后最后面還要加回去。所以sp不減性能上有優(yōu)勢(shì),減少了兩條指令。
不要小看只少了這兩條指令,有些函數(shù)調(diào)用非常頻繁,時(shí)時(shí)刻刻都在調(diào)用,少兩條指令,也能帶來(lái)性能上很大的提升。
4、混編
4.1 單獨(dú)匯編文件

image.png
4.2 嵌入?yún)R編代碼(內(nèi)聯(lián)匯編)

嵌入?yún)R編,實(shí)際開(kāi)發(fā)中沒(méi)必要這么干。只是為了看懂有些框架里面嵌入了匯編。
5、AT&T和arm匯編不一樣的地方只是在于寄存器和指令的名稱(chēng),其他都差不多,暫時(shí)不去碰arm匯編,因?yàn)橐O(shè)計(jì)到很多東西。