### 汇编实验报告模版 #### 实验一:Debug程序的使用 **实验目的:** 1. **熟悉DEBUG程序中的命令,学会在DEBUG环境下调试运行汇编语言源程序。** - 在本实验中,学生需要了解并熟练使用DEBUG程序的各种命令,特别是与程序调试相关的命令,如`A`(编辑)、`U`(反汇编)、`R`(显示寄存器内容)、`D`(显示内存内容)和`G`(运行程序)等。 2. **掌握8086/8088的寻址方式及多字节数据的处理方法。** - 学生应能够理解8086/8088处理器的不同寻址方式,比如直接寻址、寄存器间接寻址等,并能通过编写相应的程序来处理多字节数据。 **实验内容:** 1. **利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。** - 使用DEBUG中的`E`命令可以将数据写入指定的内存位置。例如,将`12345678H`写入DS:0200H处,可以使用命令`E 0200 56781234`。这里需要注意的是,由于8086/8088是小端模式存储,因此在写入时需要将数据逆序输入。同样的方法适用于将`FEDCBA98H`写入DS:0204H处。 2. **分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。** - **直接寻址方式:**使用直接寻址方式编写程序时,可以直接通过内存地址访问数据。示例程序如下: ``` MOV AX, [0200] ; 将DS:0200H处的值加载到AX寄存器 MOVBX, [0202] ; 将DS:0202H处的值加载到BX寄存器 ADD AX, [0204] ; 将DS:0204H处的值与AX中的值相加 ADC BX, [0206] ; 如果有进位,则加上进位 MOV [0208], AX ; 将结果的低16位存放到DS:0208H MOV [020A], BX ; 将结果的高16位存放到DS:020AH ``` - **寄存器间接寻址方式:**使用寄存器间接寻址方式时,需要先将内存地址存放在寄存器中,然后通过寄存器间接访问内存中的数据。示例程序如下: ``` MOV SI, 0200H ; 将DS:0200H的地址存入SI寄存器 MOV DI, 0204H ; 将DS:0204H的地址存入DI寄存器 MOV BX, 0208H ; 将DS:0208H的地址存入BX寄存器 MOV AX, [SI] ; 通过SI寄存器间接访问内存中的数据 MOV DX, [SI + 2] ; 通过SI寄存器间接访问下一个内存中的数据 ADD AX, [DI] ; 通过DI寄存器间接访问内存中的数据 ADC DX, [DI + 2] ; 通过DI寄存器间接访问下一个内存中的数据 MOV [BX], AX ; 通过BX寄存器间接将结果的低16位存放到内存 MOV [BX + 2], DX ; 通过BX寄存器间接将结果的高16位存放到内存 ``` **实验过程和程序:** 1. **启动DOS操作系统。** 2. **运行DEBUG.COM程序(若当前盘为C)。** 3. **用“A”命令编辑和汇编源程序。** - 使用`A`命令可以在DEBUG环境中编写程序。按照实验要求,可以通过以下步骤编写程序: - 编写直接寻址方式的程序: ``` A 186E:0100 MOV AX, [0200] 186E:0103 MOV BX, [0202] 186E:0107 ADD AX, [0204] 186E:010B ADC BX, [0206] 186E:010F MOV [0208], AX 186E:0112 MOV [020A], BX ``` - 编写寄存器间接寻址方式的程序: ``` A 186E:0100 MOV SI, 0200 186E:0103 MOV DI, 0204 186E:0105 MOV BX, 0208 186E:0108 MOV AX, [SI] 186E:010A MOV DX, [SI + 2] 186E:010D ADD AX, [DI] 186E:010F ADC DX, [DI + 2] 186E:0112 MOV [BX], AX 186E:0115 MOV [BX + 2], DX ``` 4. **用“U”命令反汇编验证源程序。** - 反汇编可以检查程序是否正确汇编。使用`U`命令,例如`UCS:0100`,可以看到程序的机器码表示形式。 5. **程序未执行前,用“R”命令观察相关寄存器的内容。** - 使用`R`命令可以查看寄存器的初始状态。 6. **在程序未执行前,用“D”命令观察DS:0200H、DS:0204H、DS:0208H单元的内容。** - 使用`D`命令可以查看内存中的数据。 7. **用“G”命令运行源程序。** - 使用`G`命令可以运行程序。例如,`G=1100116`可以运行从地址`1100H`到`116H`之间的程序。 8. **再用“D”命令观察DS:0200H~DS:020BH字节单元中的内容。** 9. **用“T”单步操作命令对源程序单步执行,观察AX、BX、CS、IP寄存器内容的变化,并与预计的结果相比较。** - 使用`T`命令可以逐条执行程序指令,并观察寄存器内容的变化。 #### 实验二:汇编语言程序设计(顺序、循环) **实验目的:** 1. **掌握顺序和循环程序结构和设计方法;** - 学生需要理解如何使用条件分支指令和循环指令来设计程序,以便能够根据不同的条件执行不同的程序路径或重复执行特定的程序块。 2. **熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。** - 本实验的目的在于让学生熟悉完整的开发流程,从创建源文件到编译、链接、调试和最终运行程序。 **实验内容:** - **编写程序测试BL中只有一位为1,并输出提示信息“thexbitis1”。** - 需要编写一个程序,用于检测BL寄存器中的某一位是否为1。如果某一位为1,则输出相应的提示信息。 - **地址表:** - 地址表包含了不同消息的地址和函数的地址。 - **转移表:** - 转移表中包含了针对不同情况下的函数地址。 **示例程序框架:** ``` dseg segment Msg1 db CR, LF, 'The1bitis1', '$' Msg2 db CR, LF, 'The2bitis1', '$' Msg3 db CR, LF, 'The3bitis1', '$' Msg4 db CR, LF, 'The4bitis1', '$' Addrdw Func0, Func1, Func2, Func3 count dw 0 dseg ends cseg segment assume cs:cseg, ds:dseg Start: mov ax, dseg mov ds, ax mov bl, 1 ; 编写程序代码... ; ... ; ... cseg ends end Start ``` 在这个实验中,学生将学习如何编写和调试汇编语言程序,特别是顺序和循环程序。通过这些实验,学生不仅能够提高编程技能,还能够更好地理解计算机系统的工作原理。
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助