汇编网首页登录博客注册
whfeiya的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
好友圈
文章收藏
友情链接

[2011-01-01 16:37] 检测点3.2 注释周全

补全程序
虚线为补全内容
  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数据出。
评论次数(0)  |  浏览次数(535)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码