实验2 汇编源程序编写与汇编、调试

您所在的位置:网站首页 汇编源程序和汇编程序 实验2 汇编源程序编写与汇编、调试

实验2 汇编源程序编写与汇编、调试

2023-12-04 12:43| 来源: 网络整理| 查看: 265

首先用edit编辑ex2.asm文件:

然后使用masm命令进行汇编,使用link进行连接,得到可执行文件,并且执行文件,显示出符号:

 

接下来使用debug命令调试,首先查看到CX寄存器的值为001C,说明机器码有001Bh个字节。

所以使用u命令对076A:0000 001B进行反汇编(一般字节数为CX-1)。

用g命令调试,首先使用g命令到mov  AH,4C之前,然后用t单步调试,最后使用p调试int 21,结束程序.

一开始调试根本没有显示图标,应该是和屏幕的滚动有关系,cls后单独进行执行就有结果了,下面将mov cx, 4 改成 mov cx, 8后的显示因为多反汇编了一步导致在单步调试的时候屏幕发生滚动,导致小图标的消失.

将ex2.asm中的mov cx, 4 改成 mov cx, 8;然后后重新编译,链接,生成可执行文件并运行:

明显看出来这次运行出来的小图标有8个,比修改前多了4个,而这正好对应着loop多循环了4次后,将增加了0101H的AX放入到下一个内容单元.

总结:ex1和ex2,他们实现的功能是相同的,都是将0101H的倍数(依次递增)存入到DS(B810H),因为是修改的显存的内容,所以会在屏幕上显示出图案;在具体实现上,ex1是直接寻址方式,ex2是间接寻址方式.

3. 实验任务3  综合使用loop,[bx],编写完整汇编程序,实现向内存b800:07b8开始的连续16个字单元重复填充字数据0237H。根据题目要求,编辑ex3.asm文件: 运行结果如下:

 

把填充的字数据,从0237H 改成0239H,再次保存后,汇编、链接、运行,观察结果。 把填充的字数据,从0237H 改成0437H,再次保存后,汇编、链接、运行,观察结果。

 根据实验结果,分析得到这个字数据中高位字节里存放的是颜色,低位字节里存放的是字符ASCLL码,37H是7  39H是9。

4. 实验任务4 编写完整汇编源程序,实现向内存0:200~0:23F依次传送数据0~63(3FH)。 综合使用[bx]和loop,编写汇编源程序,灵活使用debug的t命令、g命令、p命令调试。在程序退出前,用d命令查看0:200~0:23F,确认是否将0~3F传送至此段内存区域。 编辑ex4.asm代码如下:

编译之后使用debug查看各种寄存器的状态,并且使用u精准反汇编得到结果如下:

 

使用g命令直接完成循环,然后使用d 0:200 23F命令查看内容,存储内容正确,然后完成调试.

 

5. 实验任务5 教材实验4(3)(P121)

使用u命令精准反汇编:

 

 g命令调试到loop s之前:

 p命令调试:

分别查看0:200内存里面存储的和指令内容,验证是一样的,赋值成功.

空白处填写依据: 因为是将代码段的内容赋值,都是从存储器中取,所以首先将cs里的值通过ax送给ds寄存器,表明是传送的代码段的字节位置,而后面的es则是内存0:200,所以第一个空填入cs寄存器的值。 第二空首先随便填入一个数字,使用debug用u命令反汇编后可知mov ax,4c00h前面是076A:0017,所以之前的代码段是0-16h,一共17h,所以第二空填17h。 实验总结

(1)能够熟练掌握出使用masm、link工具汇编、链接的命令行并查看运行结果的方法。

(2)了解t命令 p命令和g命令的使用区别。t命令是单步调试,p命令是遇到loop指令执行到loop指令结束的位置,g命令是执行到指定的行位置,我是习惯使用g命令直接到mov ax,4c00h之前然后再t命令和p命令来结束调试。

(3)关于实验1和2,在调试过程中没有显示,个人觉得应该是和屏幕滚动有关,当行数不足以滚动屏幕时,继续t命令,小图标是不会消失的,但是当屏幕滚动时,小图标就消失了。

 

 

 

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3