实验三

Posted asm085

tags:

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

1. 练习1

第2步(1) 运行程序,观察程序输出结果是36

技术分享图片

 

(2)将 line4和line9种寄存器dl 的值分别修改为如下

技术分享图片

 

,重新汇编→ 连接→运行,结果如下:

技术分享图片

(3) 用debug对生成的可执行文件 t1.exe 进行调试。 ① 使用 r 命令查看。观察寄存器 cx 的值是 16;观察寄存器 ds的值是 15C9和 cs 的值是15D9,它们之间满足关系(cs)=(ds)+10H。

技术分享图片

② PSP(程序段前缀)的头两个字节是CD 20, 用debug查看PSP的内容,验证确实 如此。

 技术分享图片

③ 使用 u 命令对 t1.exe 进行反汇编,观察反汇编得到的源代码。

技术分享图片

④ 使用 t 命令和 p 命令(遇到 int 命令时,用 p 命令)单步调试,观察结果。
 技术分享图片

技术分享图片

练习2

(1) 对t2.asm进行汇编、连接后,得到可执行文件t2.exe。运行t2.exe,观察程序运行 结果

源代码为:

code segment
 mov ax,0b800h
 mov ds,ax
 
 mov bx,0
 mov [bx],0433h
 
 add bx,2
 mov [bx],0436h
 
 mov ax,4c00h
 int 21h
code ends

无输出。

 

在masm for windows里会报错,在dos下编译不报错(不能直接用mov写入内存单元)

修改为:

技术分享图片

 

 结果如下:(屏幕左上角)

技术分享图片

(2) 如果(1)结果得到验证,重新打开t2.asm,尝试将源代码中line7的0433h→0432h, line10 的 0436h→0439h, 然后重新汇编、连接,得到可执行文件 t2.exe。使用 cls 命令清 屏后,再次观察程序运行结果。

技术分享图片

结果如下:(屏幕左上角)

技术分享图片

 

(3) 如果(1)结果得到验证,重新打开t2.asm,尝试将源代码中line7的0433h→0333h, line10 的 0436h→0336h, 然后重新汇编、连接,得到可执行文件 t2.exe。使用 cls 命令清 屏后,再次观察程序运行结果。

技术分享图片

结果:(屏幕左上角)

技术分享图片

 

延伸思考和分析

1.  

mov ax,0b800h
 mov ds,ax
 mov bx,0
 mov [bx],0433h

向控制显示的内存写入,使得可以在屏幕上显示值,3

add bx,2
 mov [bx],0436h

向控制显示的内存写入,使得可以在屏幕上显示值,6

 

(2)在练习一中是向控制台输出值,即在下一行输出值,应该是调用函数(或者说封装好的功能)实现向控制台输出(有可能不对)。

(3)在练习二中是直接写入控制屏幕显示的内存单元(显存)。

感悟与收获

 

 在这一次实验中,我学到了如何向屏幕输出,可以用输出函数的方法,也可以用直接改变显存的方式。

在原来我们只能在debug下查看内存单元或者是寄存器的值,现在有了更多的方式实现计算机最基本的功能之一,输出,向屏幕输出。

个人更喜欢第一种方法,因为不会造成不良影响,试想如果直接改变显存,而显存里有重要的数据,可能会造成数据的丢失。

 

查证

80X25彩色字符模式显示缓冲区的结构:

  在内存地址结构中,B8000H~BFFFFH共32KB的空间,为80x25彩色字符模式的显示缓冲区。向这个地址空间写入数据,写入的内容将立即出现在

显示器上。

  在80x25彩色模式下,显示器可以显示25行,每行80个字符,每个字符可以由256中属性。

  80x25模式下,一屏的内容在显示缓冲区共4000个字符。

来源:https://www.cnblogs.com/xautxuqiang/p/5468115.html


















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

实验六报告

实验三

实验三

实验三

实验7

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