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

我的博客

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

[2008-04-14 22:50] 检测点10.1、10.2、10.3、10.4

1.检测点10.1

补全程序,实现从内存1000:0000处开始执行指令。
assume         cs:code
stack        segment
db        16 dup (0)
stack        ends

code        segment
start:        mov ax,stack
        mov ss,ax
        mov sp,16
        mov ax,1000h
        push ax
        mov ax,0;
        push ax
        retf
code        ends
end        start

说明:执行retf指令时,先出栈的数据送入IP,后出栈的数据送入CS,所以相关数据进栈时要先将CS数据入栈,再将IP数据入栈。

2.检测点10.2

下面的程序执行后,ax中的数值为多少?答案:(ax)=0006H
内存地址                 机器码                汇编指令
1000:0                b80000                mov ax,0
1000:3                e80100                call s
1000:6                40                inc ax
1000:7                58              s:pop ax

说明:“mov ax,0”执行完后(IP)=3,取指令“call s”后,(IP)=(IP)+3=6,然后执行“call s”,先将IP值入栈,然后跳转到s,栈顶数据值为6,所以执行完“pop ax”后(ax)=6。

3.检测点10.3

下面的程序执行后,ax中的数值为多少?答案:(ax)=1010H
内存地址                 机器码                汇编指令
1000:0                b80000                mov ax,0
1000:3                9a09000010        call far ptr s
1000:8                40                inc ax
1000:9                58              s:pop ax
                                add ax,ax
                                pop bx
                                add ax,bx
说明:“mov ax,0”执行完后(IP)=3,取指令“call far ptr s”后,(IP)=(IP)+5=8,然后执行“call far ptr s”,先将(CS)=1000H入栈,再将(IP)=8入栈,然后跳转到s执行,此时栈顶数据是0008H,“pop ax”后(ax)=8,“add ax,ax”后,(ax)=10H,此时栈顶数据为1000H,“pop bx”后,(bx)=1000H,所以最后执行完“add ax,bx”后(ax)=1010H。


4.检测点10.4

下面的程序执行后,ax中的数值为多少?答案:(ax)=000BH
内存地址                 机器码                汇编指令
1000:0                b80000                mov ax,6
1000:2                ffd0                call ax
1000:5                40                inc ax
1000:6                                mov bp,sp
                                add ax,[bp]
说明:“mov ax,0”执行完后(IP)=3,取指令“call ax”后,(IP)=(IP)+2=5,然后执行“call ax”,先将(IP)=5入栈,然后跳转到(IP)=6处执行“mov bp,sp”,将栈顶的偏移地址送入bp,“add ax,[bp]”中“[bp]”未显式指明段,则段地址默认存放在ss中,而ss:[bp]内容为0005H,所以最后(ax)=0006H+0005H=000BH。
评论次数(6)  |  浏览次数(966)  |  类型(汇编作业) |  收藏此文  | 

[  martian   发表于  2008-04-15 10:20  ]

检测点3有问题,博主再考虑考虑

[  martian   发表于  2008-04-15 10:25  ]

博主的检测点3没有问题,刚才搞错了,呵呵

[  sirius   发表于  2008-04-15 11:21  ]

我是有则改之,无则加勉,谢谢啊!呵呵

[  游客   发表于  2008-04-15 13:04  ]

楼主的分析看的明白啊。

[  游客   发表于  2008-06-22 17:03  ]

我每次做不来题目 都来看你的分析。。! 惭愧~

[  游客   发表于  2008-08-24 14:43  ]

谢谢您的帮助,谢谢!!

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