已知SS=0FFA0H,SP=00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令,试画出堆栈区和SP内容变化的过程示意图(标出存储单元[1]的地址).
已知SS=0FFA0H,SP=00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条
POP指令,试画出堆栈区和SP内容变化的过程示意图(标出存储单元[1]的地址).
题目解答
答案
首先,我们已知SS=0FFA0H,SP=00B0H,执行两条PUSH指令将8057H和0F79H进栈。
第一次PUSH操作:
将8057H压入堆栈,堆栈指针SP减2,SP=00AEH,堆栈内容:[00AEH]=8057H
第二次PUSH操作:
将0F79H压入堆栈,堆栈指针SP再减2,SP=00ACH,堆栈内容:[00AEH]=8057H,[00ACH]=0F79H
然后,执行一条POP指令。
POP操作:
弹出堆栈中的数据,堆栈指针SP加2,SP=00AEH,加载的数据为0F79H
最后,根据以上操作画出堆栈区和SP内容变化的过程示意图(标出存储单元的地址):
Copy Code
+-------------------+
| 00AEH |
|-------------------|
| 8057H |
|-------------------|
| |
| ... |
| |
|-------------------|
| 00B0H |
+-------------------+
答案:堆栈区中存储的数据为8057H和0F79H,最终的SP内容为00AEH。
解析
将8057H压入堆栈,堆栈指针SP减2,SP=00AEH,堆栈内容:[00AEH]=8057H
步骤 2:执行第二条PUSH指令
将0F79H压入堆栈,堆栈指针SP再减2,SP=00ACH,堆栈内容:[00AEH]=8057H,[00ACH]=0F79H
步骤 3:执行POP指令
弹出堆栈中的数据,堆栈指针SP加2,SP=00AEH,加载的数据为0F79H