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

我的博客

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

[2023-06-27 11:11] 第10章 检测点 10.2

检测点 10.2

下面的程序执行后,ax 中的数值为多少?

内存地址   机器码       汇编指令
1000:0    B8 00 00     mov ax,0
1000:3    E8 01 00     call s
1000:6    40         inc ax
1000:7    58         s: pop ax

程序执行过程如下:
1. 在 IP=0 处读取 mov ax,0 指令,由于该指令占用 3 个字节,所以执行 (IP)=(IP)+3=3,然后执行该指令,于是 (ax)=0。
2. 在 IP=3 处读取 call s 指令,由于该指令占用 3 个字节,所以执行 (IP)=(IP)+3=6,然后执行该指令,即将 IP 压栈:
(sp)=(sp)-2
((ss)*16+(sp))=(IP)=6
然后程序跳至标号 s 处,即 (IP)=7,读取 s 标号处的指令 pop ax;由于该指令占用 1 个字节,所以执行 (IP)=(IP)+1=8,然后执行 pop ax 指令。由于栈顶元素数据的值为刚才压栈的数据值 6,所以 (ax)=6。
可见,程序执行后,AX 寄存器中存储的数据值为 6。
评论次数(0)  |  浏览次数(121)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码