8086匯編三——AT&T棧幀-匯編C混編

什么叫棧幀?
就是函數(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ì)到很多東西。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 本文翻譯自iOS Assembly Tutorial: Understanding ARM 翻譯的不對(duì)的地...
    桃紅宿雨閱讀 18,415評(píng)論 7 198
  • 棧 棧:是一種具有特殊的訪問(wèn)方式的存儲(chǔ)空間(后進(jìn)先出, Last In Out Firt,LIFO) SP和FP寄...
    Superman168閱讀 2,673評(píng)論 0 2
  • 組件 計(jì)算機(jī)是一種數(shù)據(jù)處理設(shè)備,它由CPU和內(nèi)存以及外部設(shè)備組成。CPU負(fù)責(zé)數(shù)據(jù)處理,內(nèi)存負(fù)責(zé)存儲(chǔ),外部設(shè)備負(fù)責(zé)數(shù)...
    哆啦灬少A夢(mèng)閱讀 1,763評(píng)論 1 2
  • 在前幾篇文章里我們一直聊的是 Intel 格式的 8086匯編, 這篇文章我們聊聊 AT&T 格式的匯編語(yǔ)法. A...
    Lin__Chuan閱讀 19,894評(píng)論 0 12
  • 看了上一篇張子強(qiáng)的狂妄,我以為接下來(lái)兩人的對(duì)決會(huì)驚天動(dòng)地,但是事實(shí)是平淡無(wú)奇,是我最想不到的那種形式呈現(xiàn)出來(lái)。 兩...
    謝謝你遲到閱讀 709評(píng)論 0 0

友情鏈接更多精彩內(nèi)容