9,设当前程序的堆栈收奇仔器(SS)=6000H,堆栈指针寄存器(SP)=2000H;(AX)=3000H (BX)=5000H,问执行 PUSH AX、PUSH BX和POP AX后,问(SS)=?(SP)=? AX=?(Bx)=?并分别画图依次说明执行上述三条指令时堆栈指针的变化情况。
时间: 2023-06-13 20:08:22 浏览: 90
关于一个程序的堆栈使用分析
执行 PUSH AX 时,将 AX 中的值 3000H 压入栈中,堆栈指针 SP 减 2,变为 1FFEH;执行 PUSH BX 时,将 BX 中的值 5000H 压入栈中,堆栈指针 SP 再减 2,变为 1FFCH;执行 POP AX 时,将栈顶的值 5000H 弹出到 AX 中,堆栈指针 SP 加 2,变为 1FFEH;最终执行 POP BX 时,将栈顶的值 3000H 弹出到 BX 中,堆栈指针 SP 再加 2,变为 2000H。
因为堆栈初始地址为 6000H,每个栈元素占用 2 个字节,所以 SP 的值每次变化都是 2 的倍数。
因此,执行完以上指令后,(SS)=6000H,(SP)=2000H,(AX)=5000H,(BX)=3000H。
执行 PUSH AX,堆栈指针的变化情况如下图所示:
```
+--------+
| 3000H |
+--------+
SP: 1FFE SS: 6000H
```
执行 PUSH BX,堆栈指针的变化情况如下图所示:
```
+--------+
| 5000H |
+--------+
| 3000H |
+--------+
SP: 1FFC SS: 6000H
```
执行 POP AX,堆栈指针的变化情况如下图所示:
```
+--------+
| 5000H |
+--------+
| 3000H |
+--------+
SP: 1FFE SS: 6000H
```
执行 POP BX,堆栈指针的变化情况如下图所示:
```
+--------+
| 3000H |
+--------+
SP: 2000 SS: 6000H
```
阅读全文