实验三

Posted lingana

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验三相关的知识,希望对你有一定的参考价值。

实验结论

  一、练习1

  (1)编写汇编源程序t1.asm,源程序代码如下:

  技术分享图片

  编译t1.asm:

  技术分享图片

  连接t1.obj:

  技术分享图片

  (在编译和连接时,如果后面不加分号,会有生成列表文件和映像文件的过程,而加分号是一种简化的方式。)

  运行程序,输出结果为36:

   技术分享图片

  (2)将line4和line9寄存器dl的值分别修改为59,重新汇编、连接、运行,结果变化如下:

   技术分享图片

  从以上两张截图可以看出,这个程序的功能是将两段指令中dl的值逐个输出。

  (3)调试:使用 r 命令查看,cx 的值为0016,ds 的值为075a,cs 的值为076a,满足关系 (cs)=(ds)+10H。

  技术分享图片

  用debug查看PSP的内容, 发现头两个字节的确是CD 20。其中,PSP的内容存放在从 ds:ip 开始的 256 个内存单元中。

  技术分享图片

  使用u命令反汇编 t1.exe,得到的源代码如下:

  技术分享图片

  使用 t 命令和 p 命令(遇到 int 命令时,用 p 命令)单步调试,因为 int 21 是一个子程序,而我们不需要进入这个子程序运行,所以用 p 命令直接查看结果。

  技术分享图片

  技术分享图片

  技术分享图片

 

  二、练习2

  (1)编写汇编源程序 t2.asm,源程序代码如下:

  技术分享图片

  汇编、连接,运行后在屏幕左上方出现红色的数值36。

  技术分享图片

  (2)将源代码中line7的0433h→0432h, line10 的 0436h→0439h, 然后重新汇编、连接,运行后在屏幕左上方出现红色数值29。

   技术分享图片

  (3)将源代码中line7的0433h→0333h, line10 的 0436h→0336h, 然后重新汇编、连接,运行后在屏幕左上方出现蓝色数值36。

  技术分享图片

 

  三、延伸思考与分析

  (1)本实验的练习 2 和实验一中的实验任务 4 有共通之处。练习 2 中第一和第二行指令的作用是将 ds 的值改成 0b800h,也就是说之后的数据都是存放在以0b800h 为数据段段地址的内存单元中,而在实验一的实验任务 4 中说过,A0000~BFFFF 是显存的地址,所以练习 2 与实验一的实验任务 4 实验的功能是一样的,都是向显存中写入数据,然后显卡将这些数据输出到显示器上。

  (2)再比较本实验的练习 1 和练习 2,两个程序实现的都是输出数据,但在显示数据时练习 1 是直接将寄存器中的值打印输出数据,而练习 2 是先将数据存入显存,再由显卡显示到屏幕上。

 

总结与体会

  1、通过比较练习 2 中代码改变的前后结果,发现高位字节中存放的数据决定了输出内容的颜色,而地位字节中存放的数据决定了输出的内容(不同的数字或字符)。

  2、通过这次实验的延伸思考与分析,我进一步地理解了什么叫做汇编语言是针对计算机硬件的语言。

  3、通过上网查阅资料知道了 int 21h 是一个 DOS 的系统功能指令,有很多种用法,向 ah 中存入不同的值可以实现不同的功能。本实验中用到了两种,分别是:ah 中的值为 2 ——显示输出,输出字符为 dl 中的值;ah 中的值为 4ch ——带码返回结束,返回码为 al 中的值。

以上是关于实验三的主要内容,如果未能解决你的问题,请参考以下文章

实验六报告

实验三

实验三

实验三

实验7

[汇编语言]实验三:栈和栈段