任务一
DOSBOX环境下用edit命令编写汇编源程序t1.asm,如下图:
保存后,输入masm,使用该编译工具按下图步骤进行编译连接:
显示no stack segment,即可输入源程序名字,执行。
(1)运行程序,输出结果如下:
(2)用debug对生成的可执行文件t1.exe进行调试:
1、使用r命令查看,观察ds和cs的值,看是否满足(cs)=(ds)+10H
可以看出满足(cs)=(ds)+10。
2、psp程序段前缀的头两个字节是CD 20,用debug查看psp的内容,
发现psp程序段前缀头两个字节确实是CD 20。
3、用u命令对t1.exe进行反汇编,观察得到的源代码:
4、使用t命令和p命令单步调试,观察结果,注意遇到int命令时用p命令:
(3)将line4和line9中寄存器的值分别改为0~9中任何一个数字,重新汇编、连接、运行,观察结果变化。
这里我把line4的dl改为5,line9的dl改为9,编译连接步骤如(1),执行结果如下:
任务二
编写汇编源程序t2.asm如下:
(1)对t2.asm进行汇编、连接后,得到可执行文件t2.exe。运行t2.exe,观察结果是否再左上方的到红色数值36。
如直接运行没有左上方没有输出结果,输入cls清屏后再运行,得到结果如下:
(2)重新打开t2.exe,将源代码中line7的0433h改为0432h,line10的0436h改为0439h,重新汇编、连接、运行,使用cls清屏后观察运行结果:
看到结果为红色数值29。
(3)重新打开t2.exe,将源代码中line7的0433h改为0333h,line10的0436h改为0336h,重新汇编、连接、运行,使用cls清屏后观察运行结果:
得到蓝色数值36。
总结与体会
首先,在本次实验,我主要学会了对汇编源程序的编译、连接、与执行。这些都是书上有的,如果认真看书,就会很简单了。
我去网上查了一下t命令与p命令的区别,是这样解释的:单步执行命令p与单步跟踪命令t的区别在于对待call类命令的方式上。对于t命令,当碰到“call p1”命令时,单步跟踪命令t会进入该进程,再一步步地执行;而单步执行命令p会按照一般程序执行,而不会进入子程序中。对此我不是很明白。
从任务一,我们可以看到输出的结果为line4和line9中dl的值。
对比任务二中(2)和(3), mov [bx],043xh中的04决定输出的颜色,3x决定形状,其中x是十进制数字。