【实验内容】
- 通过第2章两个简单实例认识汇编语言程序,初步了解程序格式;段定义;标号;DOS系统功能;操作数;指令;说明语句等作用。
- 掌握汇编语言程序从设计到形成可执行程序文件的方法和步骤,即编辑、汇编、连接。了解汇编语言的系统工作文件和工作环境。了解汇编程序的连接程序的作用。理解列表文件内容。
- 初步了解程序的运行和调试方法。学会使用Debug主要命令和常用的DOS命令。
【实验问题与解决】
【1】编辑第3章两个简单实例,通过汇编、连接
1. 编写HELLO.ASM
2. 在dosbox中用MASM和LINK命令对程序进行汇编和链接
可以看到生成了汇编的obj文件和连接的exe文件
2. 用同样的方式编写单个字符的键盘输入与显示输出的程序,并汇编、连接
测试两个程序,结果符合预期
【2】用Debug对HELLO程序进行调试
(1)该程序在内存中的起始地址是:076B:0000;结束地址是:076B:000F;共占16个字节
(2)程序中定义的字符串 Hello World!$ 在内存中的起始地址是:076A:0000
使用D命令显示该字符串:
使用G命令运行对应程序段并显示该串:
(3)用P命令单步执行程序,查看相关寄存器的内存:
执行MOV DS,AX后,DS由075A变为076A;
执行MOV AH,09后,AX由076A变为096A;
执行MOV AH,4C后,AH由096A变为4C6A
【3】
(1)用A命令从地址076B:000CH(语句MOV AH,4C)处输入汇编语句:
使用G命令运行,可以看到程序输出了两遍Hello World,符合预期。
(2)使用带断点的G命令显示字符串:
(在新开的debug中实验,以免被(1)的修改干扰)
在076B:000E中设置断点:
可以看到执行-g E后程序在调用INT 21结束程序前停下;再运行-g后程序结束。
(3)用T命令跟踪HELLO.EXE,写出每一步执行后,相关寄存器的内容。
寄存器的相关内容如上图所示。
(4)用T命令跟踪程序,在跟踪执行INT 21时发现在继续执行一个奇怪的程序(如上图)。
解决方法:在遇到系统调用指令(INT 21)时将T换成P,如下图所示。
说明T遇到系统调用语句会出错。此时应该改用P语句继续单步执行。