亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我想問一下“保存現場”是什么意思???它保存了哪些東西呢?

我想問一下“保存現場”是什么意思???它保存了哪些東西呢?

C++
ABOUTYOU 2023-02-10 22:18:50
書上是這樣寫的“程序在執行過程中,如果遇到了對其他函數的調用,則暫停當前函數的執行,保存下一條指令的地址(即返回地址,作為從子函數返回后繼續執行的入口點),并保存現場,然后轉到子函數的入口地址,執行子函數?!?
查看完整描述

3 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

C++中函數調用的執行過程有六步:

1、參數傳遞:將函數參數壓棧:mov eax,dword ptr [n] ;(n為參數變元)。

2、操作:將幀指針壓入棧中:push ebp;使得幀指針等于棧指針:mov ebp,esp;使棧指針自減,自減得到的內存地址應當能夠(足夠)用來存儲被調用函數的本地狀態:sub esp,0CCh。

3、傳入保存狀態:push ebx ;保存ebx寄存器的值;push esi ;保存esi寄存器的值;push edi ;保存edi寄存器的值。

4、裝入edi:lea edi,[ebp-0CCh] ;0cch是當前活動記錄的大小。

5、恢復傳入的保存狀態:00411417 pop edi;00411418 pop esi;pop ebx棧指針上移,恢復空間;add esp,0CCh。

6、函數返回釋放空間:使棧指針等于幀指針: mov esp,ebp;從棧中將舊的幀指針彈出: pop ebp;返回:ret。 


查看完整回答
反對 回復 2023-02-15
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

怎么說的跟中斷似的... 

函數調用就好像堆積木一樣。調用方調用一個函數的時候,被調用的函數是直接摞在調用方上面的;被調用的函數返回的時候也就好像直接把放在上面的積木拿開。 

另外“現場”是不會被保存的。這不是中斷,函數返回后CPU的狀態不能保證和調用前相同。只是函數使用的棧內存因為互不相干,所以一般不會被改變(除非你主動去改)

查看完整回答
反對 回復 2023-02-15
?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

保存現場,即保存因為前面指向語句所存下的數據等信息,不保存的話,當指向完子函數會來,程序就沒有辦法往下執行

查看完整回答
反對 回復 2023-02-15
  • 3 回答
  • 0 關注
  • 171 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號