题目
执行返回指令时,从堆栈中弹出的是A. 调用指令的首地址B. 调用指令的末地址C. 调用指令下一条指令的首地址D. 返回指令的末地址
执行返回指令时,从堆栈中弹出的是
A. 调用指令的首地址
B. 调用指令的末地址
C. 调用指令下一条指令的首地址
D. 返回指令的末地址
题目解答
答案
C. 调用指令下一条指令的首地址
解析
考查要点:本题主要考查学生对子程序调用与返回机制的理解,特别是堆栈操作在过程调用中的作用。
解题核心思路:
在子程序调用时,调用指令(如CALL)会将返回地址压入堆栈,该地址是调用指令下一条指令的首地址。当执行返回指令(如RET)时,堆栈弹出的地址即为此时需要跳转回主程序的正确位置。因此,关键点在于明确“返回地址”的定义。
破题关键点:
- 返回地址的来源:调用指令的下一条指令地址,而非调用指令本身或返回指令的位置。
- 堆栈操作顺序:调用时压入地址,返回时弹出地址。
在计算机程序执行过程中,子程序调用的流程如下:
- 调用阶段:
- 执行
CALL指令时,CPU会自动将调用指令下一条指令的首地址压入堆栈(作为返回地址)。 - 例如,若调用指令位于地址
0x100,则下一条指令地址为0x101,此时0x101会被压入堆栈。
- 执行
- 返回阶段:
- 执行
RET指令时,堆栈会弹出之前保存的返回地址(即0x101),并跳转到该地址继续执行主程序。
- 执行
选项分析:
- A. 调用指令的首地址:错误。返回地址是调用后的下一条指令地址,而非调用指令本身。
- B. 调用指令的末地址:错误。指令末地址与堆栈操作无关,返回地址始终是下一条指令的首地址。
- C. 调用指令下一条指令的首地址:正确。这是调用时压入堆栈的地址,返回时弹出。
- D. 返回指令的末地址:错误。返回指令的地址属于子程序内部,与主程序无关。