Intel 8086 堆栈是按__原则构造的。若原堆栈指针SP=0098H,则执行 POP AX指令后SP=__ 设(AL)=39H,(BL)=56H,则执行指令ADDAL,BL 后,(AL)=_____,CF=____ ZF=___,OF=___,PF=__,SF=____,AF=____
时间: 2023-08-21 19:03:45 浏览: 173
Intel 8086 堆栈是按照"后进先出"(LIFO,Last In First Out)原则构造的。执行 POP AX 指令时,会从堆栈中弹出一个字(16位)并存入 AX 寄存器中,同时 SP 寄存器的值会加上2,指向堆栈的下一个字。
因此,执行 POP AX 指令后,SP 的值会变为009AH。接下来,执行 ADD AL, BL 指令,将 AL 寄存器的值与 BL 寄存器的值相加,并将结果存回 AL 寄存器。
执行 ADD AL, BL 指令后,(AL)的值为8FH,CF=0,ZF=0,OF=0,PF=1,SF=1,AF=0。
其中,CF 表示进位标志;ZF 表示结果是否为零;OF 表示溢出标志;PF 表示奇偶标志;SF 表示符号标志;AF 表示辅助进位标志。
相关问题
9,设当前程序的堆栈收奇仔器(SS)=6000H,堆栈指针寄存器(SP)=2000H;(AX)=3000H (BX)=5000H,问执行 PUSH AX、PUSH BX和POP AX后,问(SS)=?(SP)=? AX=?(Bx)=?并分别画图依次说明执行上述三条指令时堆栈指针的变化情况。
执行 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
```
设当前程序的堆栈收寄存器(SS)=6000H,堆栈指针寄存器(SP)=2000H;(AX)=3000H (BX)=5000H,问执行 PUSH AX、PUSH BX和POP AX后,问(SS)=?(SP)=?(AX)=?(BX)=?并分别画图依次说明执行上述三条指令时堆栈指针的变化情况)
执行 PUSH AX 操作时,将 AX 的值 3000H 压入栈中。由于栈是向下生长的,所以 SP 的值会减少 2 个字节,即 SP=1FFEh。栈中的内容如下($表示空出的位置):
| 1FFFh | 3000h |
| ----- | ----- |
| 1FFEh | $ |
| 1FFDh | $ |
| ... | ... |
| 2000h | $ |
执行 PUSH BX 操作时,将 BX 的值 5000H 压入栈中。同样,SP 的值会再次减少 2 个字节,即 SP=1FFCh。栈中的内容如下:
| 1FFFh | 3000h |
| ----- | ----- |
| 1FFEh | 5000h |
| 1FFDh | $ |
| ... | ... |
| 2000h | $ |
执行 POP AX 操作时,将栈顶的值 5000H 弹出并存入 AX 中。SP 的值会增加 2 个字节,即 SP=1FFEh。栈中的内容如下:
| 1FFFh | 3000h |
| ----- | ----- |
| 1FFEh | $ |
| 1FFDh | $ |
| ... | ... |
| 2000h | $ |
执行完毕后,AX 的值为 5000H。
最终的状态为:(SS)=6000H,(SP)=1FFEh,(AX)=5000H,(BX)=5000H。
堆栈指针的变化情况如下图所示:
![堆栈指针变化图](https://img-blog.csdn.net/20180820144518707?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3B1YmxpY19vZmZpY2lhbF9sb2dv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80)
阅读全文