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

书上是这样写的“程序在执行过程中,如果遇到了对其他函数的调用,则暂停当前函数的执行,保存下一条指令的地址(即返回地址,作为从子函数返回后继续执行的入口点),并保存现场,然后转到子函数的入口地址,执行子函数。……”

ABOUTYOU
浏览 150回答 3
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。 

弑天下

怎么说的跟中断似的... 函数调用就好像堆积木一样。调用方调用一个函数的时候,被调用的函数是直接摞在调用方上面的;被调用的函数返回的时候也就好像直接把放在上面的积木拿开。 另外“现场”是不会被保存的。这不是中断,函数返回后CPU的状态不能保证和调用前相同。只是函数使用的栈内存因为互不相干,所以一般不会被改变(除非你主动去改)

潇湘沐

保存现场,即保存因为前面指向语句所存下的数据等信息,不保存的话,当指向完子函数会来,程序就没有办法往下执行
打开App,查看更多内容
随时随地看视频慕课网APP