一、实验名称
- 实验4 [bx]和loop的使用
- 实验5 编写、调试具有多个段的程序
二、实验目的
- 掌握汇编语言源程序编写→汇编→链接→调试的方法
- 掌握灵活应用[bx]表示内存单元和loop指令实现循环的用法
- 掌握具有多个段的汇编源程序结构、编写、调试
- 理解具有多个段的汇编源程序对应的目标程序执行时,内存分配方式
三、实验内容
- 教材实验4(P121)
其中:实验任务(1)和(2)合并成一道编程题,题目改成:
综合使用loop,[bx],编写完整汇编源程序,实现向内存0:200~0:23F依次传送数据0~63(3FH)。 - 教材实验5(P133-137)
四、实验步骤
教材实验4(P121)
- 实验任务(1)和(2)
首先,在t1.asm中写入源程序。
然后,进入虚拟Dos进行编译和连接,并没有警告错误和必须改正的错误。
这是编译和连接产生的目标文件以及可执行文件。用debug对可执行文件进行调试。首先进行反汇编。
先用t命令单步调试代码段前四条语句,在开始对0:200~0:22f内存单元进行修改之前查看0:200~0:22f内存单元的值。然后用g命令运行程序,运行到076A:0011之前。再查看0:200~0:22f内存单元的值。结果显示传送成功。
实验任务(3)
应该将对应的机器码分别存储到指定的内存单元。由于我个人的虚拟Dos默认 CS = 076A,所以第一空应该填写 076A或者CS ,根据对所有指令的机器码的统计,在mov ax,4c00h 指令之前总共有24个字节,所以循环计数寄存器cx 的值为24。并进行了接下来的操作来验证我的推断。
首先在t2.asm 写入源程序。
然后,进入虚拟Dos进行编译和连接,并没有警告错误和必须改正的错误。
先进行反汇编,查看机器码的个数。
用t命令单步调试到循环执行之前,查看0:200 后面若干内存单元的值。再用g命令执行指令到076A:0018之前结束,并再次查看0:200 后面若干的内存单元的值,发现已经被修改并用u命令对0:200后面的内存单元进行反汇编,发现指令被成功复制!
- 实验任务(1)和(2)
实验教材5(P133-137)
- 实验任务(5)
首先是程序的源代码。以及编译、连接形成的文件
用u命令进行反汇编,并通过反汇编的内容得知a,b,c段的段地址。并分别查看a,b,c的8个字节的内容。
用g命令执行指令到076D:001C之前,并用d命令查看c的8个字节。达到了预期的目标!
- 实验任务(6)
首先是程序的源代码。以及编译、连接形成的文件
用u命令进行反汇编,可知a段和b段对应的段地址,并用d命令查看在push操作之前每个段的8个字单元。
用g命令运行程序到076D:001b之前,并用d命令查看逻辑段b的8个字单元,发现并被正确复制进去。
- 实验任务(5)