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

我的博客

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

[2023-04-18 21:25] 第3章 检测点 3.2

检测点 3.2

(1) 补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到20000H~2000FH中。逆序复制的含义如下表所示(表中内存里的数据均为假设)。

 地址 数据(十六进制)  地址   数据(十六进制)
10000H      23   20000H      33
10001H      01   20001H      11
10002H      66   20002H      FE
10003H      22   20003H      9A
...               ...                        
1000CH      FE   2000CH      66
1000DH      9A   2000DH      22
1000EH      33   2000EH      23
1000FH      11   2000FH      01
        
给定指令代码:
mov ax, 1000H
mov ds, ax
...
push [0]
push [2]
push [4]
push [6]
push [8]
push [A]
push [C]
push [E]

解题思路:将2000:0~2000:F设置为栈段空间,将1000:0~1000:F内存空间(视为数据段空间)的数据通过push指令逆序传送到栈段空间。
将以下代码补全到上述代码的省略号处:
mov ax, 2000H
mov ss, ax      ; 设置栈顶段地址
mov sp, 0010H     ; 设置栈顶偏移地址
将上述完整的代码通过Debug的A命令写入3000:0代码段空间,用R命令设置CS=3000H,IP=0000H,再通过T命令执行,以及用D命令来验证指令执行的结果。
注:可以将1000:0~1000:F数据段中的1000:4~1000:A部分数据设置为a1~a8或任意数据。

(2) 改动上题中给定的代码如下:
mov ax, 2000H
mov ds, ax
...
pop [E]
pop [C]
pop [A]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]
要求补全省略号中的代码以实现相同的逆序复制功能。
解题思路:将1000:0~1000F设置为栈段空间,将2000:0~2000:F视为数据段空间,通过pop指令将栈段空间存储的数据逆序传送到数据段空间。
补全的代码如下:
mov ax, 1000H
mov ss, ax     ; 设置栈顶段地址
mov sp, 0     ; 设置栈顶偏移地址
将上述完整的代码通过Debug的A命令写入3000:0代码段空间,用R命令设置CS=3000H,IP=0000H,再通过T命令执行,以及用D命令来验证指令执行的结果。
评论次数(0)  |  浏览次数(125)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码