汇编语⾔_实验三_编程、编译、连接、跟踪
四、实验结论汇编语言如何编程
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实现间接寻址。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论