为了账号安全,请及时绑定邮箱和手机立即绑定

我想问一下“保存现场”是什么意思啊?它保存了哪些东西呢?

我想问一下“保存现场”是什么意思啊?它保存了哪些东西呢?

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 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号