《微机原理与汇编语言程序设计》 实验指导书 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)表示成各个分离的标 志位,其意义如下表所示:
《微机原理与汇编语言程序设计》实验指导书 溢出 方向 中断 符号 零 辅助进位 奇偶 进位 0 NV UP DI PL NZ NA PO NC Ov DN EI NG ZR AC PE CY b)-RAX:显示指定的AX寄存器当前的内容,并等待键入新值:如果不作修改, 可直接回车。如: -RAX AX0000 :1234 c)-RF:显示标志寄存器F各个标志位的内容,并等待键入新的标志位:如果不作 修改,可直接回车。如: -RF NVUPEIPLNZNA PONC -ZR 3)运行命令G:使程序在DEBUG控制下运行,一般有全程、断点运行两种方式。 )-G:控制程序由当前P处运行,直至程序结束。如果当前P为初始值,其作用 则相当于直接在DOS下运行程序,一般用于快速观察程序的运行情况。 b)-G0123¥:控制程序由当前P处运行,直至指定的断点P-O123H处,程序暂停, 显示各个寄存器的当前值及断点处指令,然后返回DEBUG提示符“.”下。如对 TEST.EXE,若想观察字符串显示的入口参数是否设置好,则可以断点运行至000A 处: -G00041 AX=09B6BX=0000 CX=0020DX=0000SP=0000BP=0000S=0000D=0000 DS=12B6 ES=12A6 SS=12B6 CS=12B7 IP=000A NV UP EI PL NZ NA PO NC 12B7:000ACD21 INT 21 断点一般选取在需要观察的地方,当程序停下来后,可以根据各方面的情况(如寄存器、 缓冲区、标志等)来判断程序是否运行正确。 4)单步命令T:控制程序运行一条指令后暂停,显示各个寄存器的当前值及断点处指令, 然后返回DEBUG提示符“.”下。如对TEST.EXE,若当前P为初始值,则键入T 命令后有如下显示: -TY AX=12B6BX=0000CX=0020DX=0000SP=0000BP=0000SI=0000DI=0000 DS=12A6 ES=12A6 SS=12B6 CS=12B7 IP-0003 NV UP EI PLNZ NA PO NC 12B7:00038ED8 MOV DS,AX 单步命令一般用于需对程序运行作仔细分析的地方,如判断分支转移、观察运算结果等。 若能综合运用断点及单步指令,则可大大提高DEBUG调试的速度及效率。但应注意,当P 指针位于NT21H一类指令处时,执行T命令将会使程序进入该功能调用子程序中,因此, 3
《微机原理与汇编语言程序设计》实验指导书 3 溢出 方向 中断 符号 零 辅助进位 奇偶 进位 0 NV UP DI PL NZ NA PO NC 1 OV DN EI NG ZR AC PE CY b) -R AX↘:显示指定的 AX 寄存器当前的内容,并等待键入新值;如果不作修改, 可直接回车。如: -R AX↘ AX 0000 :1234↘ - c) -R F↘:显示标志寄存器 F 各个标志位的内容,并等待键入新的标志位;如果不作 修改,可直接回车。如: -R F↘ NV UP EI PL NZ NA PO NC -ZR↘ - 3) 运行命令 G:使程序在 DEBUG 控制下运行,一般有全程、断点运行两种方式。 a) -G↘:控制程序由当前 IP 处运行,直至程序结束。如果当前 IP 为初始值,其作用 则相当于直接在 DOS 下运行程序,一般用于快速观察程序的运行情况。 b) -G 0123↘:控制程序由当前 IP 处运行,直至指定的断点 IP=0123H 处,程序暂停, 显示各个寄存器的当前值及断点处指令,然后返回 DEBUG 提示符“-”下。如对 TEST.EXE,若想观察字符串显示的入口参数是否设置好,则可以断点运行至 000A 处: -G 000A↘ AX=09B6 BX=0000 CX=0020 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=12B6 ES=12A6 SS=12B6 CS=12B7 IP=000A NV UP EI PL NZ NA PO NC 12B7:000A CD21 INT 21 - 断点一般选取在需要观察的地方,当程序停下来后,可以根据各方面的情况(如寄存器、 缓冲区、标志等)来判断程序是否运行正确。 4) 单步命令 T:控制程序运行一条指令后暂停,显示各个寄存器的当前值及断点处指令, 然后返回 DEBUG 提示符“-”下。如对 TEST.EXE,若当前 IP 为初始值,则键入 T 命令后有如下显示: -T↘ AX=12B6 BX=0000 CX=0020 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=12A6 ES=12A6 SS=12B6 CS=12B7 IP=0003 NV UP EI PL NZ NA PO NC 12B7:0003 8ED8 MOV DS,AX - 单步命令一般用于需对程序运行作仔细分析的地方,如判断分支转移、观察运算结果等。 若能综合运用断点及单步指令,则可大大提高 DEBUG 调试的速度及效率。但应注意,当 IP 指针位于 INT 21H 一类指令处时,执行 T 命令将会使程序进入该功能调用子程序中,因此
《微机原理与汇编语言程序设计》实验指导书 这种情况下最好不用T命令,而用断点运行命令跳过该类功能调用指令。 5)显示内存命令D:以十六进制及ASCⅡ两种方式显示内存区的二进制数据,通常用来 观察数据段内的缓冲区内容。一般常用以下二种形式: )-D:从0000单元开始,连续显示128个内存单元的内容,如果继续键入D命令, 则继续显示后128个单元内容。如对TEST.EXE,若想观察字符串显示时的字符串 内容是否正确,则可在程序断点运行至000A处,键入D命令: -D DS:0 12B6:000048656C6C6F2C576F-726C642124000000 Hello,World!$. 12B6:0010B8B6128ED8BA0000-B409CD21B44CCD21.L.I 12B6:0020EB518B867AFF2BC6-40508A460898508B.Q.z.+.@P.F.P 12B6:007083C4028B5E048A07-2AE489867AFF3BC6 八*Z.; 在上例中,128个单元分成8行,每行16个单元,每个单元的内容分别以十六进制形式 和ASCI码形式显示。如果该单元的内容不是可显示字符,则在ASC区内显示为“.”。 b)-D01230143y:从指定的0123单元开始显示,直至指定的0143单元结束。 6)汇编命令A:用于在DEBUG环境下直接键入汇编语言语句、生成较简单的可执行代 码而不必经过完整的汇编语言编程步骤,或者用来在调试过程中临时修改某条指令。 如: -4Y 127D:0100 MOV AH,02 127D:0102 MOV AL,64 127D:0104WT 21 127D:0106 入¥ -A0102¥ 127D:0102MOp DL,6A 127D:0104 当键入汇编命令A后,将从当前P或指定地址处提示输入汇编语句,每输入一条语句, DEBUG将其汇编成机器码,并存入相应的存储单元中,然后地址自动增加,继续提示输入下 一条语句:如果直接▣车,则结束汇编命令。特别应注意的是,DBG默认使用十六进制,放 在输入时不能使用H。 7)装载命令L:用来将被调试程序重新装载进内存中,一般用于程序运行结束后需继续 调试程序时,或需从头开始调试程序时。如对TEST.EXE: -G¥ Hello.World! Program terminated normally -L¥ 8)退出命令Q:键入此命令,即退出DEBUG状态,返回DOS。 4
《微机原理与汇编语言程序设计》实验指导书 4 这种情况下最好不用 T 命令,而用断点运行命令跳过该类功能调用指令。 5) 显示内存命令 D:以十六进制及 ASCII 两种方式显示内存区的二进制数据,通常用来 观察数据段内的缓冲区内容。一般常用以下二种形式: a) -D↘:从 0000 单元开始,连续显示 128 个内存单元的内容,如果继续键入 D 命令, 则继续显示后 128 个单元内容。如对 TEST.EXE,若想观察字符串显示时的字符串 内容是否正确,则可在程序断点运行至 000A 处,键入 D 命令: -D DS:0↘ 12B6:0000 48 65 6C 6C 6F 2C 57 6F-72 6C 64 21 24 00 00 00 Hello,World!$... 12B6:0010 B8 B6 12 8E D8 BA 00 00-B4 09 CD 21 B4 4C CD 21 ...........!.L.! 12B6:0020 EB 51 8B 86 7A FF 2B C6-40 50 8A 46 08 98 50 8B .Q..z.+.@P.F..P. „„ „„ 12B6:0070 83 C4 02 8B 5E 04 8A 07-2A E4 89 86 7A FF 3B C6 ....^...*...z.;. - 在上例中,128 个单元分成 8 行,每行 16 个单元,每个单元的内容分别以十六进制形式 和 ASCII 码形式显示。如果该单元的内容不是可显示字符,则在 ASCII 区内显示为“.”。 b) –D 0123 0143↘:从指定的 0123 单元开始显示,直至指定的 0143 单元结束。 6) 汇编命令 A:用于在 DEBUG 环境下直接键入汇编语言语句、生成较简单的可执行代 码而不必经过完整的汇编语言编程步骤,或者用来在调试过程中临时修改某条指令。 如: -A↘ 127D:0100 MOV AH,02↘ 127D:0102 MOV AL,6A↘ 127D:0104 INT 21↘ 127D:0106 ↘ -A 0102↘ 127D:0102 MOV DL,6A↘ 127D:0104 ↘ - 当键入汇编命令 A 后,将从当前 IP 或指定地址处提示输入汇编语句,每输入一条语句, DEBUG 将其汇编成机器码,并存入相应的存储单元中,然后地址自动增加,继续提示输入下 一条语句;如果直接回车,则结束汇编命令。特别应注意的是,DEBUG 默认使用十六进制,故 在输入时不能使用 H。 7) 装载命令 L:用来将被调试程序重新装载进内存中,一般用于程序运行结束后需继续 调试程序时,或需从头开始调试程序时。如对 TEST.EXE: -G↘ Hello,World! Program terminated normally -L↘- 8) 退出命令 Q:键入此命令,即退出 DEBUG 状态,返回 DOS
《微机原理与汇编语言程序设计》实验指导书 实验二汇编语言上机基本步骤 一、实验目的: 熟悉汇编语言的上机过程,掌握各项工具软件的使用方法 二、实验环境 1.硬件:PC微机 2.软件:DOS系统、EDIT.EXE、MASM.EXE、LNK.EXE、DEBUG.EXE 三、实验内容: 1.前期准备: 在开始进行汇编语言上机练习之前,建立并进入自己的工作子目录,准备好相关工具软 件如MASM.EXE、LNK.EXE等,其后所有工作均在自己的子目录中进行,以避免因路径概 念不清而导致的文件存取错误,以及对系统其它部分造成影响。 1)建立自己的工作子目录(例如MYTEST): C:MD MYTEST 2)进入自己的工作子目录: C:-CD MYTEST 3) 将所需工具软件从其它地方(如C:MASM)拷贝进自己的工作子目录: C:\MYTEST>COPY C:MASMMASM.EXE CAMYTEST-COPY C:IMASMLINK EXE 2.编写源程序: 原则上可以用任何文字处理软件(如EDT、写字板、甚至WORD)编写源程序,但必须 注意,源程序应为ASCI码文件(或称纯文本文件),扩展名一般为.ASM。因此,建议使用 DOS环境下的EDIT软件。 I)在DOS系统操作提示符下键入EDIT并回车,即可进入EDIT文本编辑环境。如果 没有进入,检查当前路径下是否存在EDIT.EXE文件,以及文件是否完整等。 2)从键盘输入下列程序(不必输入注释部分): CODE SEGMENT :定义一个CODE段 ASSUME CS:CODE ;定义CODE段为代码段 START: :可执行语句起始处 MOV AH,02H ;以下三条语句将显示字母a MOV DL,'a' INT 21H MOV AH,4CH ;以下二条语句将返回DOS INT 21H CODE ENDS :CODE段结束 END START ;整个程序结束 该程序的功能是仅在CT屏上显示一个字母a,完成功能的只有其中的三条语句,但其 它部分则是一个完整的汇编语言源程序必不可少的部分。 3)存盘退出EDT文本编辑环境。在存盘时应将文件的扩展名确定为.ASM(如 5
《微机原理与汇编语言程序设计》实验指导书 5 实验二 汇编语言上机基本步骤 一、实验目的: 熟悉汇编语言的上机过程,掌握各项工具软件的使用方法 二、实验环境 1. 硬件:PC 微机 2. 软件:DOS 系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE 三、实验内容: 1. 前期准备: 在开始进行汇编语言上机练习之前,建立并进入自己的工作子目录,准备好相关工具软 件如 MASM.EXE、LINK.EXE 等,其后所有工作均在自己的子目录中进行,以避免因路径概 念不清而导致的文件存取错误,以及对系统其它部分造成影响。 1) 建立自己的工作子目录(例如 MYTEST): C:\>MD MYTEST 2) 进入自己的工作子目录: C:\>CD MYTEST 3) 将所需工具软件从其它地方(如 C:\MASM)拷贝进自己的工作子目录: C:\MYTEST>COPY C:\MASM\MASM.EXE C:\MYTEST>COPY C:\MASM\LINK.EXE 2. 编写源程序: 原则上可以用任何文字处理软件(如 EDIT、写字板、甚至 WORD)编写源程序,但必须 注意,源程序应为 ASCII 码文件(或称纯文本文件),扩展名一般为.ASM。因此,建议使用 DOS 环境下的 EDIT 软件。 1) 在 DOS 系统操作提示符下键入 EDIT 并回车,即可进入 EDIT 文本编辑环境。如果 没有进入,检查当前路径下是否存在 EDIT.EXE 文件,以及文件是否完整等。 2) 从键盘输入下列程序(不必输入注释部分): CODE SEGMENT ;定义一个 CODE 段 ASSUME CS:CODE ;定义 CODE 段为代码段 START: ;可执行语句起始处 MOV AH,02H ;以下三条语句将显示字母 a MOV DL,’a’ INT 21H MOV AH,4CH ;以下二条语句将返回 DOS INT 21H CODE ENDS ;CODE 段结束 END START ;整个程序结束 该程序的功能是仅在 CRT 屏上显示一个字母 a,完成功能的只有其中的三条语句,但其 它部分则是一个完整的汇编语言源程序必不可少的部分。 3) 存盘退出 EDIT 文本编辑环境。在存盘时应将文件的扩展名确定为.ASM(如
《微机原理与汇编语言程序设计》实验指导书 TEST.ASM),并注意存盘的路径,最好与EDIT、MASM、LNK等软件相同。 4)在DOS系统提示符下利用DR命令检查TEST.ASM文件是否确实产生。 3.汇编: 利用MASM.EXE宏汇编程序,将己经存盘的ASCI码源程序翻译成二进制目标程序,其 扩展名一般为.OBJ。 1)操作方法:假定当前工作路径为C:MYTEST>,且所需文件均存在于当前路径,则 针对源程序TEST.ASM的汇编有以下三种方法(其中斜体部分由键盘输入): a)C:\MYTEST>MASM.EXE Microsoft(R)Macro Assembler Version 5.00 Copyright(C)Microsoft Corp 1981-1985,1987.All rights reserved. Source filename [.ASM]:TEST Object filename [TEST.OBJ]:\ Source listing [NUL.LST]: Cross-reference [NUL.CRF]: 51524+435132 Bytes symbol space free 0 Warning Errors 0 Severe Errors b)C:\MYTEST>MASM TEST.ASM Microsoft(R)Macro Assembler Version 5.00 Copyright(C)Microsoft Corp 1981-1985,1987.All rights reserved. Object filename [TEST.OBJ]: Source listing [NUL.LST]: Cross-reference [NUL.CRF]: 51524+435132 Bytes symbol space free 0 Warning Errors 0 Severe Errors c)C:\MYTEST>MASM TEST: Microsoft(R)Macro Assembler Version 5.00 Copyright(C)Microsoft Corp 1981-1985,1987.All rights reserved. 51524+435132 Bytes symbol space free 0 Warning Errors 0 Severe Errors 2)在上述三种方法中,推荐使用第三种,但是必须满足以下要求: a)所有文件均位于当前工作路径下。 b)源程序扩展名为.ASM,目标程序扩展名为.OBJ。 3)若源程序有语法错误,则汇编结束将给出提示信息,并依次列出错误出现的行号及性 质。这时,应重新进入EDT文本编辑环境中,根据提示对源程序进行修改,然后 重新存盘、汇编。只有所有错误为0,才能得到正确的目标文件。注意该步骤只能 检查出语法错误,对设计思想上的错误,应通过调试才能检查出来。 4)汇编结束后,检查是否产生相应日标程序TEST.OBJ。 6
《微机原理与汇编语言程序设计》实验指导书 6 TEST.ASM),并注意存盘的路径,最好与 EDIT、MASM、LINK 等软件相同。 4) 在 DOS 系统提示符下利用 DIR 命令检查 TEST.ASM 文件是否确实产生。 3. 汇编: 利用 MASM.EXE 宏汇编程序,将已经存盘的 ASCII 码源程序翻译成二进制目标程序,其 扩展名一般为.OBJ。 1) 操作方法:假定当前工作路径为 C:\MYTEST>,且所需文件均存在于当前路径,则 针对源程序 TEST.ASM 的汇编有以下三种方法(其中斜体部分由键盘输入): a) C:\MYTEST>MASM.EXE↘ Microsoft (R) Macro Assembler Version 5.00 Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved. Source filename [.ASM]:TEST↘ Object filename [TEST.OBJ]:↘ Source listing [NUL.LST]:↘ Cross-reference [NUL.CRF]:↘ 51524 + 435132 Bytes symbol space free 0 Warning Errors 0 Severe Errors b) C:\ MYTEST >MASM TEST.ASM↘ Microsoft (R) Macro Assembler Version 5.00 Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved. Object filename [TEST.OBJ]:↘ Source listing [NUL.LST]:↘ Cross-reference [NUL.CRF]:↘ 51524 + 435132 Bytes symbol space free 0 Warning Errors 0 Severe Errors c) C:\ MYTEST >MASM TEST;↘ Microsoft (R) Macro Assembler Version 5.00 Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved. 51524 + 435132 Bytes symbol space free 0 Warning Errors 0 Severe Errors 2) 在上述三种方法中,推荐使用第三种,但是必须满足以下要求: a) 所有文件均位于当前工作路径下。 b) 源程序扩展名为.ASM,目标程序扩展名为.OBJ。 3) 若源程序有语法错误,则汇编结束将给出提示信息,并依次列出错误出现的行号及性 质。这时,应重新进入 EDIT 文本编辑环境中,根据提示对源程序进行修改,然后 重新存盘、汇编。只有所有错误为 0,才能得到正确的目标文件。注意该步骤只能 检查出语法错误,对设计思想上的错误,应通过调试才能检查出来。 4) 汇编结束后,检查是否产生相应目标程序 TEST.OBJ
《微机原理与汇编语言程序设计》实验指导书 4.连接: 利用LNK.EXE连接程序,将二进制目标程序整理成DOS系统下的可执行程序,其扩展 名必须为.EXE。 1)操作方法:与汇编相似,可有多种形式,一般使用: C:\MYTEST>LINK TEST: 但需注意这时的TEST应是.TEST.OBJ文件。 2)在得到正确的.OBJ文件后,该步骤一般不会出现问题,但可能会出现下列提示: LINK:warning L4021:no stack segment 针对该提示,可不予理会。 3)连接结束后,检查是否产生相应的可执行程序TEST.EXE。 5.运行: 1)如果没有问题,生成的可执行程序TEST.EXE即可以象其它DOS外部命令一样,直 接在DOS系统下运行,整个编程工作完成。如在本实验中: C:\MYTEST>TEST 2)一般在编写较复杂的程序时,可能出现设计上的错误。如果不能在源程序中检查出错 误,则必须通过DEBUG调试,才能检查出错误所在,然后再回到前面的各个步骤 中重复操作。在本实验中,由于程序简单,可以不必调试。 四、练习 对实验程序进行由浅及深的修改,领会上机的各个步骤及注意事项。 实验三 基本程序设计 一、实验目的 学习顺序、分支、循环三种基本结构的程序设计方法 二、实验环境 1.硬件:PC微机 2.软件:DOS系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE 三、实验内容 1.编写程序,要求对键盘输入的小写英文字母用相应大写英文字母显示,如键盘输入“a”, 则显示“A”。 2.编写程序,若键盘输入小写字母,则用相应大写字母显示:反之,若键盘输入大写字母, 则用相应小写字母显示。 3.编写程序,循环实现上述程序2的功能,直至键盘输入任一非英文字符,程序停止。 四、练习
《微机原理与汇编语言程序设计》实验指导书 7 4. 连接: 利用 LINK.EXE 连接程序,将二进制目标程序整理成 DOS 系统下的可执行程序,其扩展 名必须为.EXE。 1) 操作方法:与汇编相似,可有多种形式,一般使用: C:\ MYTEST >LINK TEST;↘ 但需注意这时的 TEST 应是.TEST.OBJ 文件。 2) 在得到正确的.OBJ 文件后,该步骤一般不会出现问题,但可能会出现下列提示: LINK:warning L4021:no stack segment 针对该提示,可不予理会。 3) 连接结束后,检查是否产生相应的可执行程序 TEST.EXE。 5. 运行: 1) 如果没有问题,生成的可执行程序 TEST.EXE 即可以象其它 DOS 外部命令一样,直 接在 DOS 系统下运行,整个编程工作完成。如在本实验中: C:\ MYTEST >TEST↘ 2) 一般在编写较复杂的程序时,可能出现设计上的错误。如果不能在源程序中检查出错 误,则必须通过 DEBUG 调试,才能检查出错误所在,然后再回到前面的各个步骤 中重复操作。在本实验中,由于程序简单,可以不必调试。 四、练习 对实验程序进行由浅及深的修改,领会上机的各个步骤及注意事项。 实验三 基本程序设计 一、实验目的 学习顺序、分支、循环三种基本结构的程序设计方法 二、实验环境 1. 硬件:PC 微机 2. 软件:DOS 系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE 三、实验内容 1. 编写程序,要求对键盘输入的小写英文字母用相应大写英文字母显示,如键盘输入“a”, 则显示“A”。 2. 编写程序,若键盘输入小写字母,则用相应大写字母显示;反之,若键盘输入大写字母, 则用相应小写字母显示。 3. 编写程序,循环实现上述程序 2 的功能,直至键盘输入任一非英文字符,程序停止。 四、练习