《微机原理与汇编语言程序设计》 实验指导书 funin Agscolta:al Univernity 不牌 装农 天津农学院 微机原理与汇编语言精品课程组
《微机原理与汇编语言程序设计》 实验指导书 天 津 农 学 院 微 机 原 理 与 汇 编 语 言 精 品 课 程 组
《微机原理与汇编语言程序设计》实验指导书 前 言 本实验指导书适用于计算机专业,实验时间24学时,12次上机时间。 主要学习内容为80X86语言实验环境配置、汇编源语言格式、输出字符、循 环结构、子程序调用,以及加减乘除等指令操作、通用接口芯片的接口编程与使 用。 学习结束后,要求学生能够独立编写出综合加减乘除等指令,以及循环结构、 子程序调用等程序控制程序、看懂一般接口芯片电路图。 2
《微机原理与汇编语言程序设计》实验指导书 2 前 言 本实验指导书适用于计算机专业,实验时间 24 学时,12 次上机时间。 主要学习内容为 80X86 语言实验环境配置、汇编源语言格式、输出字符、循 环结构、子程序调用,以及加减乘除等指令操作、通用接口芯片的接口编程与使 用。 学习结束后,要求学生能够独立编写出综合加减乘除等指令,以及循环结构、 子程序调用等程序控制程序、看懂一般接口芯片电路图
《微机原理与汇编语言程序设计》实验指导书 目 录 软件部分 实验一用DEBUG调试程序..... 实验二汇编语言上机基本步骤..............5 实验三基本程序设计..... 实验四分支程序设计(一) …8 实验五分支程序设计(二) …….10 实验六分支程序设计(三)...., 0…12 实验七循环程序设计实验.. ....14 实验八子程序设计实验. .....16 实验九排序程序设计实验.. …19 实验十运算类指令编程实验..., 0……21 硬件部分 实验十一即插即用配置资源的获取实验... ......25 实验十二简单I/0端口实验.... ..32 实验十三可编程中断控制器8259A实验(一) .....41 实验十四可编程中断控制器8259A实验(二) .46 实验十五可编程计数器/定时器8253(一).… ....55 实验十六可编程计数器/定时器8253(二)....58 实验十七P℃机发声及音乐程序设计.。 ...66 实验十八主控DMA8237实验... …70 3
《微机原理与汇编语言程序设计》实验指导书 3 目 录 软件部分 实验一 用 DEBUG 调试程序 .........................................1 实验二 汇编语言上机基本步骤 .....................................5 实验三 基本程序设计 .............................................7 实验四 分支程序设计(一) .......................................8 实验五 分支程序设计(二) ...................................... 10 实验六 分支程序设计(三) ...................................... 12 实验七 循环程序设计实验 ........................................ 14 实验八 子程序设计实验 .......................................... 16 实验九 排序程序设计实验 ........................................ 19 实验十 运算类指令编程实验 ...................................... 21 硬件部分 实验十一 即插即用配置资源的获取实验 ............................ 25 实验十二 简单 I/O 端口实验 ..................................... 32 实验十三 可编程中断控制器 8259A 实验(一) ...................... 41 实验十四 可编程中断控制器 8259A 实验(二) ...................... 46 实验十五 可编程计数器/定时器 8253(一) ......................... 55 实验十六 可编程计数器/定时器 8253(二) ......................... 58 实验十七 PC 机发声及音乐程序设计................................ 66 实验十八 主控 DMA8237 实验 ...................................... 70
《微机原理与汇编语言程序设计》实验指导书 软件部分 实验一用DEBUG调试程序 一、 实验目的 学习利用DEBUG调试程序的基本思想及方法 二、实验环境 1.硬件:PC微机 2.软件:DOS系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE 三、实验内容 利用DEBUG调试程序,可以将一个可执行程序(如.EXE、.COM等)装入内存中,并接 管对程序运行的控制权,通过采取如反汇编、断点运行、单步执行、寄存器内容修改等方法, 对可执行程序进行跟踪、调试,以找出其中的设计错误,然后再对源程序进行相应修改,重新 生成正确的可执行程序。 1.准备被调试程序: 假定所有有关文件均在当前路径C:MYTEST>下,按照实验一的步骤生成一个被调试的 可执行程序(如TEST.EXE),参考程序如下: DATA SEGMENT STR DB ‘Good Morning!$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV DX,OFFSET STR MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START 2.进入DEBUG环境:(其中斜体部分由键盘输入。) C:\MYTEST>DEBUG TEST.EXE
《微机原理与汇编语言程序设计》实验指导书 1 软件部分 实验一 用 DEBUG 调试程序 一、实验目的 学习利用 DEBUG 调试程序的基本思想及方法 二、实验环境 1. 硬件:PC 微机 2. 软件:DOS 系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE 三、实验内容 利用 DEBUG 调试程序,可以将一个可执行程序(如.EXE、.COM 等)装入内存中,并接 管对程序运行的控制权,通过采取如反汇编、断点运行、单步执行、寄存器内容修改等方法, 对可执行程序进行跟踪、调试,以找出其中的设计错误,然后再对源程序进行相应修改,重新 生成正确的可执行程序。 1. 准备被调试程序: 假定所有有关文件均在当前路径 C:\MYTEST>下,按照实验一的步骤生成一个被调试的 可执行程序(如 TEST.EXE),参考程序如下: DATA SEGMENT STR DB ‘Good Morning!$’ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV DX,OFFSET STR MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START 2. 进入 DEBUG 环境:(其中斜体部分由键盘输入。) C:\ MYTEST>DEBUG TEST.EXE↘
《微机原理与汇编语言程序设计》实验指导书 其中,短线‘.’作为DEBUG环境的操作提示符,在此提示符下,可以输入各种DEBUG 命令,对可执行程序TEST.EXE进行跟踪调试。 3.主要调试命令: 1)反汇编命令U:将存储器中的二进制数据翻译成较有意义的助记符形式,以帮助理解。 一般常用以下格式: a)-U八:从当前P处开始,对连续约32字节内容反汇编。如对TEST.EXE,刚装入 DEBUG时的P=0OO0,则在输入U命令后有如下显示: -U¥ 12B7:0000B8B612 MOV AX,12B6 12B7:00038ED8 MOV DS,AX 12B7:0005BA0000 MOV DX,0000 12B7:0008B409 MOV AH,09 12B7:000ACD21 INT 21 12B7:000CB44C MOV AH,4C 12B7:000ECD21 INT 21 12B7:0010EB51 JMP 0063 12B7:00128B867AF MOV AX,[BP+FF7A] geg。e 12B7:001F8B4604 MOV AX,[BP+04] 在上例中,12B7:0000表示CS:P的内容(其中CS的值是动态值);B8B612代表该 处存放的二进制数据,亦即指令MOV AX,12B6的机器代码:当连续约32字节的数据反汇 编完后,重新回到DEBUG提示符“.”下,如果再键入U命令,则将继续对后面的内存区反 汇编。 特别应该注意的是,由于反汇编命令针对内存区的二进制数据,而被调试程序仅占内存区 的某一部分,故反汇编出来的内容并非全是被调试程序的代码,如上例中的JMP0063以后的 部分,显然不是TEST.EXE的内容。另外还需注意,DEBUG默认使用十六进制。 b)-U0123¥:从指定的P=0123处开始,对连续约32字节内容反汇编。 c)-U01230143:从指定的P=0123处开始反汇编,直至指定的0143处结束。 2)显示寄存器命令R:显示或修改寄存器的内容。一般常用以下形式 )-Ry:显示所有寄存器当前的内容及当前将执行的指令。如对TEST.EXE,在程序 运行之前,键入R命令: -RY AX=0000BX=0000CX=0020DX=0000SP=0000BP=0000SI=0000D=0000 DS=12A6 ES=12A6 SS=12B6 CS=12B7 IP=0000 NV UP EI PL NZ NA PO NC 12B7:0000B8B612 MOV AX,12B6 在显示寄存器内容时,标志寄存器F(或程序状态字寄存器P$W)表示成各个分离的标 志位,其意义如下表所示: 2
《微机原理与汇编语言程序设计》实验指导书 2 - 其中,短线‘-’作为 DEBUG 环境的操作提示符,在此提示符下,可以输入各种 DEBUG 命令,对可执行程序 TEST.EXE 进行跟踪调试。 3. 主要调试命令: 1) 反汇编命令 U:将存储器中的二进制数据翻译成较有意义的助记符形式,以帮助理解。 一般常用以下格式: a) -U↘:从当前 IP 处开始,对连续约 32 字节内容反汇编。如对 TEST.EXE,刚装入 DEBUG 时的 IP=0000,则在输入 U 命令后有如下显示: -U↘ 12B7:0000 B8B612 MOV AX,12B6 12B7:0003 8ED8 MOV DS,AX 12B7:0005 BA0000 MOV DX,0000 12B7:0008 B409 MOV AH,09 12B7:000A CD21 INT 21 12B7:000C B44C MOV AH,4C 12B7:000E CD21 INT 21 12B7:0010 EB51 JMP 0063 12B7:0012 8B867AF MOV AX,[BP+FF7A] „„ „„ „„ 12B7:001F 8B4604 MOV AX,[BP+04] - 在上例中,12B7:0000 表示 CS:IP 的内容(其中 CS 的值是动态值);B8B612 代表该 处存放的二进制数据,亦即指令 MOV AX,12B6 的机器代码;当连续约 32 字节的数据反汇 编完后,重新回到 DEBUG 提示符“-”下,如果再键入 U 命令,则将继续对后面的内存区反 汇编。 特别应该注意的是,由于反汇编命令针对内存区的二进制数据,而被调试程序仅占内存区 的某一部分,故反汇编出来的内容并非全是被调试程序的代码,如上例中的 JMP 0063 以后的 部分,显然不是 TEST.EXE 的内容。另外还需注意,DEBUG 默认使用十六进制。 b) –U 0123↘:从指定的 IP=0123 处开始,对连续约 32 字节内容反汇编。 c) –U 0123 0143↘:从指定的 IP=0123 处开始反汇编,直至指定的 0143 处结束。 2) 显示寄存器命令 R:显示或修改寄存器的内容。一般常用以下形式: a) -R↘:显示所有寄存器当前的内容及当前将执行的指令。如对 TEST.EXE,在程序 运行之前,键入 R 命令: -R↘ AX=0000 BX=0000 CX=0020 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=12A6 ES=12A6 SS=12B6 CS=12B7 IP=0000 NV UP EI PL NZ NA PO NC 12B7:0000 B8B612 MOV AX, 12B6 - 在显示寄存器内容时,标志寄存器 F(或程序状态字寄存器 PSW)表示成各个分离的标 志位,其意义如下表所示: