码迷,mamicode.com
首页 > 其他好文 > 详细

实验报告:实验四

时间:2018-11-17 16:14:45      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:前缀   16px   ima   color   div   调试   实验报告   开头   指令   

1.综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个字单元重复填充字数据 0403H。

代码如下:

 

 1 assume cs:code
 2 code segment
 3    mov ax,0b800h
 4    mov ds,ax
 5    mov bx,07b8h
 6    mov cx,10h
 7 
 8 s: mov [bx],0403h
 9    add bx,2
10    loop s
11   
12    mov ax,4c00h
13    int 21h
14 code ends
15 end

 

需注意的是如果地址以字母开头的话需要在前面加0。

并且是重复填充字数据,所以每次bx值需要+2.

然后汇编→连接→运行→调试。如下图

技术分享图片

结果如下图

技术分享图片

然后将源代码程序中字数据 0403H→修改为 0441H,结果如下图。(16个A)

技术分享图片

2. 综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据0~63(3FH)。

代码如下:

 

 1 assume cs:code
 2 code segment
 3     mov ax,20h
 4     mov ds,ax
 5     mov bx,0
 6     mov cx,40h
 7     mov al,0
 8 
 9 s:  mov [bx],al
10     inc al
11     inc bx
12     loop s
13   
14     mov ax,4c00h
15     int 21h
16 code ends
17 end

 

然后汇编→连接→运行→调试。如下图

技术分享图片

分部调试

技术分享图片

技术分享图片

查看结果对应地址确实改为了0-63。

 3.下面的程序功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果:

最终代码如下:

 1 assume cs:code
 2 code segment
 3    mov ax,cs
 4    mov ds,ax
 5    mov ax,0020h
 6    mov es,ax
 7    mov bx,0
 8    mov cx,17h
 9 s: mov al,[bx]
10    mov es:[bx],al
11    inc bx
12    loop s
13    mov ax,4c00h
14    int 21h
15 code ends
16 end

其中,想要复制程序代码,即从cs:ip开始(ip默认为bx=0),即把cs赋值给ax。

循环次数cx一开始并不确定,但是可以在运行的程序反汇编中看出所需复制的代码的长度。则随意给cx赋值,查看反汇编代码长度

如下图

技术分享图片

可以看出程序从0000-0016为所需复制的代码,长度为23个字节。

即赋值cs=17h。

然后重新编译连接运行调试,结果如下图:

技术分享图片

然后用g命令直接调试,再用d命令查看指定地址中的内存数据是否为反汇编中的代码对应的数据:

技术分享图片

结果相符。

总结和感想:

1.熟悉了汇编中loop语句的循环使用。

2.对段前缀【bx】的语法和用法有所理解,同时对g命令一步到位的调试很有好感。

实验报告:实验四

标签:前缀   16px   ima   color   div   调试   实验报告   开头   指令   

原文地址:https://www.cnblogs.com/xue123/p/9972249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!