远山 发表于 2016-5-6 21:57:35

调用子程序时为什么不用将标志寄存器的值入栈?

本帖最后由 远山 于 2016-5-6 22:02 编辑

看到12章,因为在中断过程中要改变标志寄存器的值,所以cpu在中断过程中要首先将标志寄存器入栈,那么在调用子程序的时候呢,子程序中也可能改变标志寄存器的值不是吗,不需要将标志寄存器入栈吗?

兰陵月 发表于 2016-5-11 13:06:41

1、中断机制属于突发事件处理,这个突发事件在它发生之前,你根本就不知道它是什么,需要做什么样的处理
也就是说,会有很多很多各种各样的状况,这些状况可能影响你正在做的事情,也有可能不影响。所以最保险的做法是保存现场,即pushf操作(我这里说pushf操作,并不是说计算机会执行pushf指令,因为这种操作是计算机硬件完成的,不是靠pushf指令完成的)。
2、子程序调用属于一种在时间上和空间上(或叫地址上)可控的处理。子程序会否影响标志寄存器以及各种,这都是编程者需要事先处理好的(如果不处理好,则可能出现各种达不到原有目的的情况)。既然事先要做处理的,当然就不必PUSHF操作了,当然也可以人为进行这个操作,这也是pushf指令的作用。

不知是否正确,请多多指教。

远山 发表于 2016-5-12 08:38:20

兰陵月 发表于 2016-5-11 13:06
1、中断机制属于突发事件处理,这个突发事件在它发生之前,你根本就不知道它是什么,需要做什么样的处理
...

让我理解理解先{:10_257:}
页: [1]
查看完整版本: 调用子程序时为什么不用将标志寄存器的值入栈?