实验三
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
2
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
以上是关于实验三的主要内容,如果未能解决你的问题,请参考以下文章