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

我的博客

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

[2023-06-27 12:14] 第10章 检测点 10.3

检测点 10.3


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

内存地址    机器码            汇编指令
1000:0     B8 00 00         mov ax,0
1000:3     9A 09 00 00 10     call far ptr s
1000:8     40             inc ax
1000:9     58             s:  pop ax
                         add ax,ax
                         pop bx
                         add ax,bx

程序执行过程如下:
1. 在 IP=0 处读取 mov ax,0 指令,由于该指令占用 3 个字节,所以执行 (IP)=(IP)+3=3,然后执行该指令,于是 (ax)=0。
2. 在 IP=3 处读取 call far ptr s 指令,由于该指令占用 5 个字节,所以执行 (IP)=(IP)+5=8,然后执行该指令,即将 CS 和 IP 压栈:
(sp)=(sp)-2
(ss)*16+(sp))=(CS)=1000H
(sp)=(sp)-2
((ss)*16+(sp))=(IP)=8H
然后程序跳至标号 s 处:
(CS)=标号所在段的段地址=1000H
(IP)=标号在段中的偏移地址=9H
读取并执行 s 标号处的指令:
pop ax      ; (ax)=8H
add ax,ax    ; (ax)=(ax)+(ax)=8H*2=10H
pop bx      ; (bx)=1000H
add ax,bx    ; (ax)=(ax)+(bx)=10H+1000H=1010H
可见,程序执行后,AX 寄存器中存储的数据值为 1010H。
评论次数(0)  |  浏览次数(117)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码