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

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
  •  此情可待成追忆 只是当时已惘然
  • 『姓名』:流浪鱼              
  • 『性别』:保密  『发送消息
  • 个人说明:伟大航路
  • 详细信息『加为好友』
学习动态
最新留言
文章收藏
友情链接

[2008-05-20 20:00] 检测点10.1-5

10.1
The answer is (mov ax,1000h ; mov ax,0).
程序中采用的retf,在此之前用了两次push指令,很明显用到了cs和ip的值,根据retf指令的操作知道先pop ip,再pop cs,所以在入栈时就先cs,再ip。

10.2
ax=6。
第一次做错了,认为ax=3,后来觉得有点太顺理成章,所以又看了一遍,发现执行call指令时,压入堆栈的值是call的下一条指令的偏移地址,试想ax=3,那么pop ax又返回到call指令了,这样就变成了死循环。

10.3
ax=1010h
经过call指令后,进入堆栈的cs=1000,ip=8,进过pop ax后,栈中的ip值赋给了ax,则ax=8
add后,ax=16=10h
pop bx后,bx=栈中cs=1000h
add ax,bx后,ax=1000h+10h=1010h

10.4
ax=11=0bh
call ax后,ip=5被压入栈中,同时程序跳转到1000:6
bp=sp,因为刚才sp指向ip=5,所以ax=6+5=11=0bh

10.5
(1)ax=3
注意一点:call word ptr 内存单元地址 相当于
push ip
jmp word ptr 内存单元地址

分析程序:前面是初始化寄存器,到 call 指令
首先将 inc ax 所对应的偏移地址压入堆栈,然后找到ds:[0EH],并跳转,我们发现ds:[0EH]里的内容就是指令 inc ax 的偏移地址,所以这里 call 指令,只相当于是个 push 指令了

(2)ax=1,bx=0
此程序采用了 call dword ptr ss:[0],首先将当前cs,ip压入堆栈,先cs,后ip,然后跳转到(ss:[0]=offset s)
程序将标号 s 所指的偏移地址赋给了ax
再来看ss:[0ch]是什么,就是nop指令所对应的偏移地址,而nop指令占一个字节,所以 sub ax,ss:[0ch] 后 ax=1
ss:[0eh] 里面存的是cs的值,因为程序没有改变过cs的值,所以bx=0
评论次数(1)  |  浏览次数(591)  |  类型(汇编作业) |  收藏此文  | 

[  游客   发表于  2008-05-21 11:21  ]

理解的都很正确。
一定要记牢,理解透哟。这在以后的学习过程中可是很重要滴。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码