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

我的博客

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

[2023-04-15 13:14] 第3章 问题 3.3

问题 3.3

1. 内存中的情况如下:
 地址        数据(十六进制)
10000H        23
10001H        11
10002H        22
10003H        66

2. 执行指令:
mov ax, 1000H
mov ds, ax
mov ax, [0]
mov bx, [2]
mov cx, [1]
add bx, [1]
add cx, [2]
(1) 指令 mov ax, 1000H:将数据 1000H 存储到寄存器 AX 中。
(2) 指令 mov ds, ax:将通用寄存器 AX 存储的数据传送到段寄存器 DS 中。
(3) 指令 mov ax, [0]:CPU 首先自动读取段寄存器 DS 存储的数据 1000H 作为段地址,与指令中指定的偏移地址 0000H 组合成物理地址 10000H,将该物理地址指向的内存单元所存储的字传送到寄存器 AX 中;由于指令中的内存单元偏移地址是 0,所以该偏移地址与段地址组成的物理地址就是“字”的低 8 位,即该“字”的低 8 位地址是 10000H,高 8 位地址是 10001H。已知地址 10000H 所存储的数据为 23H,它和地址 10001H 所存储的数据 11H 组成一个“字”数据 1123H,可见传送到 AX 寄存器的数据就是 1123H。
(4) 指令 mov bx, [2]:如同前述 (3) 中的分析一样,本指令将地址 10002H 中存储的字传送给寄存器 bx,该字的低 8 位地址是 10002H,高 8 位地址是 10003H,而地址 10002H 内存单元存储的是 22H,地址 10003H 内存单元存储的是 66H,所以传送给 BX 寄存器的数据就是 6622H。
(5) 指令 mov cx, [1]:本指令传送的字的低 8 位地址是 10001H,高 8 位地址是 10002H,10001H 存储的数据是 11H,10002H 存储的数据是 22H,因此传送给寄存器 CX 的是数据 2211H。
(6) 指令 add bx, [1]:本指令将地址为 10001H 存储单元所存储的字数据与 BX 寄存器中存储的数据相加后,将结果存入 BX 寄存器。已知 10001H 存储空间的字由低 8 位地址 10001H 和高 8 位地址 10002H 的内存单元组成,而 10001H 地址的内存单元存储的数据是 11H,10002H 地址的内存单元存储的数据是 22H,所以该字数据为 2211H,由上述 (4) 可知 BX 寄存器存储的数据是 6622H,所以两者相加的结果是 8833H,可见指令执行
后 BX 寄存器存储的数据变成 8833H。
(7) 指令 add cx, [2]:本指令将地址为 10002H 存储单元所存储的字数据与 CX 寄存器中存储的数据相加后,将结果存入 CX 寄存器。已知 10002H 存储空间的字由低 8 位地址 10002H 和高 8 位地址 10003H 的内存单元组成,而 10002H 地址的内存单元存储的数据是 22H,10003H 地址的内存单元存储的数据是 66H,所以该字数据为 6622H,由上述 (5) 可知 CX 寄存器存储的数据是 2211H,所以两者相加的结果是 8833H,可见指令执行
后 CX 寄存器存储的数据变成 8833H。

3. 通过在 Debug 实验环境执行上述汇编指令,以验证结果。
(1) 将数据存入地址 1000:0~1000:3 的存储空间
-e 1000:0
1000:0000 00.23 00.11 00.22 00.66
-d 1000:0 f
1000:0000 23 11 22 66 00 00 00 ...
(2) 将示例代码写入内存 2000:0 起始的空间
-a 2000:0
2000:0000 mov ax, 1000H
2000:0003 mov ds, ax
2000:0005 mov ax, [0]
2000:0008 mov bx, [2]
2000:000C mov cx, [1]
2000:0010 add bx, [1]
2000:0014 add cx, [2]
2000:0018
(3) 修改 CS:IP,将 CPU 执行指令的指针指向所编写的代码所在内存空间
-r cs
CS=0741
:2000
-r ip
IP=0100
:0
-r
AX=0000 BX=0000 CX=0000 ....
DS=0741 ....        CS=2000 IP=0000 ....
2000:0000 ...        MOV AX,1000 

(4) 执行汇编指令
-t

AX=1000 BX=0000 CX=0000 ....
DS=0741 ....        CS=2000 IP=0003 ....
2000:0003 ...        MOV DS,AX
-t

AX=1000 BX=0000 CX=0000 ....
DS=1000 ....        CS=2000 IP=0005 ....
2000:0005 ...        MOV AX,[0000]
-t

AX=1123 BX=0000 CX=0000 ....
DS=1000 ....        CS=2000 IP=0008 ....
2000:0008 ...        MOV BX,[0002]
-t

AX=1123 BX=6622 CX=0000 ....
DS=1000 ....        CS=2000 IP=000C ....
2000:000C ...        MOV CX,[0001]
-t

AX=1123 BX=6622 CX=2211 ....
DS=1000 ....        CS=2000 IP=0010 ....
2000:0010 ...        ADD BX,[0001]
-t

AX=1123 BX=8833 CX=2211 ....
DS=1000 ....        CS=2000 IP=0014 ....
2000:0014 ...        ADD CX,[0002]
-t

AX=1123 BX=8833 CX=8833 ....
DS=1000 ....        CS=2000 IP=0018 ....
2000:0018 ...        ADD [BX+SI],AL

(5) 验证 1000:0 地址的字内存空间存储内容是否由初始值 584AH 变化为 11C3H
-d 1000:0 f
1000:0000 C3 11 00 00 00 ...
评论次数(0)  |  浏览次数(92)  |  类型(问题分析) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码