补全程序
虚线为补全内容
MOV AX,1000H
MOV DS,AS 设置数据段的段地址为1000H
--MOV AX,2000H
--MOV SS,AX 设置栈段的段地址为2000H
--MOV SP,0010H 设置栈顶为0010H,2000:000E,000E+2=0010
PUSH [0]
PUSH [2]
PUSH [4]
PUSH [6]
PUSH [8]
PUSH [S]
PUSH [C]
PUSH [E]
这题开始我疑惑了一下,为什么要PUSH 0 2 4 6 8,后来才想起来整个数据段是从10000H到1000FH,图片上省略了10004到1000B,所以总共8个字,需要这样PUSH下去。至于栈顶的设置考虑是当栈为空时,栈顶的地址为SP+2,栈最底部的字单元地址为2000:000E。因此000E+2等于0010.本题解决。
---------------------------------------------------
【2】
MOV AX,2000H
MOV DS,AX
--MOV AX,1000H
--MOV SS,AX
--MOV SP,0
POP [E]
POP [C]
POP [A]
POP [8]
POP [6]
POP [4]
POP [2]
POP [0]
第二题疑惑了一下主要是为什么要POP[E]开始,而不是POP【0】后来明白了。POP是出栈,因此栈顶已经定义了,需要定义POP到什么地方。【E】就是POP到2000EH这里。搞定。
-----------------------------------------
总结就是PUSH是入栈,自然需要有数据入,因为定义了数据段的段地址,因此就PUSH指定的偏移地址的数据进入栈。
POP是出栈,自然是有数据才能出,因此直接从栈段的段顶地址开始POP数据出。