题24

题目

【2012 统考真题】中断处理和子程序调用都需要压栈, 以便保护现场, 中断处理一定会保存而子程序调用不需要保存其内容的是 ( )。
A. 程序计数器
B. 程序状态字寄存器
C. 通用数据寄存器
D. 通用地址寄存器

分析

这个题感觉做过类似的,中断处理因为肯定要返回,所以现场和当前的入口肯定要保护
我记得是B

B
子程序调用不改变程序的状态, 因为子程序调用是编译器可控aB流程, 而中断不是。
以程序 为例,它通常包含一条测试指令,以及一条根据标志位决定是否需要跳转来调用子程序的指令。
编译器不在这两条指令中间插入任何子程序调用代码, 因此标志位不变, 但中断却随时可能发生,导致标志位改变。
具体地说,执行 时,会进行 操作,并生成相应的标志位, 进而根据标志位来判断是否发生跳转。
假设刚好在生成相应的标志位后发生了中断, 若不保存 PSW 的内容, 则后续根据标志位来进行跳转的流程就可能发生错误。
但是, 若进行了子程序调用, 则说明已经根据 的标志位进行了跳转,此时 PSW 的内容已无意义而无须保存。
综上所述, 中断处理和子程序调用都有可能使 PSW 的内容发生变化, 但中断处理程序执行完返回后, 可能需要用到 PSW 原来的内容, 子程序执行完返回后, 一定不需要用到 PSW 原来的内容, 因此选 B。
A 项都会保存, 项不一定会保存。