码迷,mamicode.com
首页 > 编程语言 > 详细

汇编语言_实验三_编程、编译、连接、跟踪

时间:2018-11-18 21:07:57      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:地址   红色   显示   两种   bubuko   单步调试   exe   字符   ESS   

四、实验结论

 1.       练习1

第一步,在记事本中输入实验要求中提供的代码,结果如下:

 技术分享图片

 

将其以文件名t1.asm另存为到E:/masm。

第2步,为方便后续操作,此处先准备一个批处理文件:

 技术分享图片

 

同样将其放入E盘masm路径下,重命名为process.bat。

(1)进入并配置好DSBox环境,使用process t1对t1.asm进行编译、连接并运行:

技术分享图片

屏幕上出现36.

(2)将修改line 4和line 6中寄存器dl增加的值,发现line 4中写入的数值是屏幕上显示的第一位数字1,line 9中的数值是屏幕上第二位数字。

(3)使用debug命令对生成的t1.exe进行调试。

①首先,使用r命令查看寄存器的值:

 技术分享图片

注意到,此处CX的值是0016H,DS的值为075AH,CS的值为076AH,刚好满足CS=DS+10H。

②使用d命令查看程序段前缀的前两个字节,发现前两个字节的确是CD 20:

 技术分享图片

3.反汇编t1.exe,查看所得代码,由于CX=0016H,所以此处我们查看从CS开始的0015H个字节的代码:

 技术分享图片

刚好是t1.asm中的内容。

④使用t命令和p命令进行单步调试直至程序结束,观察结果:

技术分享图片

技术分享图片

技术分享图片

 

2.       练习2

第一步,编写汇编源程序:

 技术分享图片

第二步,

(1)对源程序进行编译、连接、运行,运行结果如下:

技术分享图片

看到屏幕出现酒红色的36,嗯,这说明我们的程序有好好的编译连接和运行了……

(等等,说好的err呢?

技术分享图片

(2)好吧,我们进继续按照实验要求中将原代码line 7的0433H改为0432H,将line 10中毒的0436H改为0439H,重新进行编译、链接、运行,得到结果如图:

 技术分享图片

(3)我们继续尝试修改填入显存单元中的数值,将源代码中line7的0433h改为0333h, line10 的 0436h改为0336h, 然后重新汇编、连接,并运行,结果如下:

技术分享图片

此时屏幕左上角出现了绿色的36。

3.       延伸思考与分析

(1)在实验一中,我们已知地址A0000~BFFFF被用来当做显存地址空间,向地址为A0000~BFFFF的内存单元中写入数据,就是向显存中写入数据,这些数据会被显示卡输出到显示器上。在练习2中,line 7和line 10实际上即是在向段地址为B800H,偏移地址为BX的内存单元中写入数据,所以会被直接显示在屏幕的对应位置。而且,注意到显示的数字的ASCII码正好为写入的数据第二个字节。同时我们也看到,屏幕上打印的文字的颜色随着第一个字节的改变而改变。

(2)练习2中打印字符的原理参见上问,此处不再赘述。在练习1中是通过系统功能调用来显示数值,并且我们观察到,INT 21H所实现的功能随寄存器AH中的值不同而不同,当AH=02H时,所实现的功能是显示字符,并且显示的字符所对应的ASCII码正好是寄存器DL中的数据。

 

五、总结与体会

通过实践两种不同的方式在显示器上打印字符,学习了完整汇编源程序编写→汇编→连接→运行→调试的方法,加深了对之前所学知识的理解,掌握了通过寄存器BX实现间接寻址。

汇编语言_实验三_编程、编译、连接、跟踪

标签:地址   红色   显示   两种   bubuko   单步调试   exe   字符   ESS   

原文地址:https://www.cnblogs.com/AlexanderYang/p/9979260.html

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