汇编的超超简单问题

来源:百度知道 编辑:UC知道 时间:2024/06/28 10:00:08
新手,请问为什么调用函数call时,需要假设所有寄存器的值都被晴空了?%ebp除外

不必清空,但一定要保存好寄存器的值,你说假设清空,是在一个特殊情况之下的。因为在调用子程序的时候,假如用到主程序里的寄存器,那么显然主程序里的寄存器值将会被改写,这是我们不希望的结果,于是就经常用入栈来保存寄存器的值。当然,如果有部分寄存器是用来做实参传递和子程序返回值的,那么就不应该保存。你说的假设被清空了,大概是子程序本来在调用的时候需要初始化寄存器值,那么出于调用和优化的考虑,就假设所有寄存器的值被清空了。

不是寄存器清空,是保存起来,防止在子程序里用到有的寄存器,这样会出错误的