【发布时间】:2015-09-21 00:54:07
【问题描述】:
给定一个字节可寻址系统。假设字大小(=寄存器大小)为2字节。堆栈向上增长,当前堆栈指针位于0x016E。CALL指令有两个字,操作码字,另一个是子程序的起始地址。CALL指令的工作原理如下:
i) 将 PC、PSW 加载到堆栈中;
ii)在PC中加载子程序的起始地址。
CALL指令前的PC内容为0x5FA0(我假设是填充信息)。CALL指令执行后堆栈指针的值是多少?
答案是 0x172。
所以这就是我无法解决的问题。 PC + PSW + CALL = 堆栈上的 8 个字节。或者 CALL 指令没有存储在堆栈上?一个明确的事件顺序将不胜感激。提前致谢!
【问题讨论】:
-
为什么要在堆栈上存储调用指令?
-
通常,调用函数时唯一存储在堆栈中的是返回地址(PC)。其他一切都是可选的。例如,x86 中的 CALL 指令只会将 EIP 压入堆栈。在 ARM 架构上,没有任何东西被压入堆栈。