1
《微机原理与汇编语言程序设计》实验指导
实验一 汇编语言上机环境及基本操作
一、实验目的及要求
1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的
关系。
2.学会使用 EDIT、MASM、LINK、DEBUG 等软件工具。
3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、实验内容
1.汇编语言源程序的建立
本例中给出的程序是要求从内存中存放的 10 个无符号字节整数数组中找出最小数,将其
值保存在 AL 寄存器中。设定源程序的文件名为 ABC。
DATA
DATA
STACK
DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FH
EQU $-BUF
SEGMENT
BUF
CN
ENDS
SEGMENT STACK ’STACK’
STA DB 10 DUP(?)
TOP EQU $-STA
ENDS
SEGMENT
ASSUME
START: PUSH DS
STACK
CODE
XOR AX,AX
PUSH AX
CS:CODE,DS:DATA,SS:STACK
2
MOV
AX,DATA
MOV DS,AX
MOV BX,OFFSET BUF
MOV CX,CN
DEC CX
MOV AL,[BX]
INC BX
LP: CMP AL,[BX]
JBE NEXT
MOV AL,[BX]
INC BX
DEC CX
JNZ LP
MOV AH,4CH
INT 21H
ENDS
END START
NEXT:
CODE
键入以下命令:
C:\>EDIT ABC.ASM
此时屏幕的显示状态如图 1 所示。
图 1 用 EDIT 编辑 ABC.ASM 程序窗口
程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出
源程序进行修改。
2. 将源程序文件汇编成目标程序文件
一般情况下,MASM 汇编程序的主要功能有以下 3 点:
(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在 DOS 状态下,采用宏汇编程序 MASM 对源程序文件进行汇编,其
操作过程如图 2 所示。
3
图 2 MASM 宏汇编程序工作窗口
汇编过程的错误分警告错误(Warning Errors)和严重错误(Severe Errors)两种。其中警
告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错
误,并给出错误的个数、错误的性质。这时,就要对错误进行分析,找出原因和问题,然后再
调用屏幕编辑程序加以修改,修改以后再重新汇编,一直到汇编无错误为止。
3.用连接程序生成可执行程序文件
经汇编以后产生的目标程序文件(.OBJ 文件)并不是可执行程序文件,必须经过连接以
后,才能成为可执行文件(即扩展名为.EXE)。
连接过程如图 3 所示。
图 3 LINK 连接程序工作窗口
上述提示行回答以后,连接程序开始连接,如果连接过程中出现错误,则显示出错误信
息,根据提示的错误原因,要重新调入编辑程序加以修改,然后重新汇编,再经过连接,直到
4
没有错误为止。连接以后,便可以产生可执行程序文件(.EXE 文件)。
4.程序的执行
当我们建立了正确的可执行文件以后,就可以直接在 DOS 状态下执行该程序。
如:C:\>ABC
本程序当中没有用到 DOS 中断调用指令,所以在屏幕上看不到程序执行的结果。
我们可以采用调试程序 DEBUG 来进行检查,相关内容请参见实验二。
三、实例分析
下面通过一个汇编语言源程序的实际例子,来了解汇编语言源程序的建立、汇编、连接、
运行的完整过程。给出的程序是从键盘输入 10 个字符,然后以与键入相反的顺序将 10 个字符
输出到显示屏幕上。设定源程序名为 STR.ASM。
1.用 EDIT 建立汇编语言源程序
在 DOS 状态下,调用 EDIT 编辑程序建立文件名为 STR.ASM 的汇编源程序,如图 4 所
示。
图 4 用 EDIT 建立汇编语言源程序
2.用 MASM 汇编生成目标文件
源程序文件建立完毕后,调用宏汇编程序 MASM 对 STR.ASM 进行汇编,如图 5 所示。
5
图 5 用 MASM 汇编生成目标文件
3.用 LINK 进行连接生成可执行文件
汇编完毕,程序正确,则可调用 LINK 进行连接,以生成可执行文件 STR.EXE,连接过
程如图 6 所示。
图 6 用 LINK 连接生成可执行文件
4.程序的运行
在 DOS 状态下,直接键入可执行的程序文件名 STR,然后从键盘输入“0123456789”10
个数字,输入回车键后,计算机将 10 个数字倒序排列输出,即“9876543210”。再次键入可执
行的程序文件名 STR,从键盘输入“abcdefghIj”10 个字符,输入回车键后,计算机将 10 个
字符倒序排列输出,即“jihgfedcba”。
运行过程及其结果如图 7 所示。
6
图 7 程序的运行状态及结果
实验二 DEBUG 调试程序的应用
1.直接启动 DEBUG 程序
如 DEBUG.COM 在 C 盘的根目录下,启动的方法是:
C:\>DEBUG
_
这时屏幕上会出现“_”提示符,等待键入 DEBUG 命令。
2.启动 DEBUG 程序的同时装入被调试文件
命令格式如下:
C:\>DEBUG [d:][PATH]filename[.EXT]
[d:][PATH]是被调试文件所在盘及其路径,filename 是被调试文件的文件名,[.EXT]是被
调试文件的扩展名。
例如:BCDSUM.EXE 可执行文件在 A 盘,用 DEBUG 对其进行调试的操作命令如下。
C:\>DEBUG A:\BCDSUN.EXE↙
DOS 在调用 DEBUG 程序后,再由 DEBUG 把被调试文件装入内存,当被调试文件的扩
展名为 COM 时,装入偏移量为 100H 的位置,当扩展名为 EXE 时,装入偏移量为 0 的位置,
并建立程序段前缀 PSP,为 CPU 寄存器设置初始值。
3.退出 DEBUG
在 DEBUG 命令提示符“_”下键入 Q 命令,即可结束 DEBUG 的运行,返回 DOS 操作
7
系统。
4.在 DEBUG 环境下建立和汇编程序
在 DEBUG 环境下用户可以直接建立汇编语言源程序,并可以进行编辑修改,还可以进行
汇编。
比如,在 DEBUG 下运行如下程序:
MOV DL,33H
MOV AH,2
21H
INT
INT
20H
;字符 3 的 ASCII 码送 DL
;使用 DOS 的 2 号功能调用
;进入功能调用,输出‘3’
;BIOS 中断服务,程序正常结束。
该程序运行结果是在显示器上输出一个字符‘3’。如果要输出其它字符,请改变程序中
‘33H’为相应字符的 ASCII 码。其中涉及 DOS 和 BIOS 功能调用。因为我们是在 DOS 的支
持下运行汇编语言程序,所以一般情况下,不能轻易使用输入/输出指令直接通过端口输入/
输出,而必须使用 DOS 内部提供的子程序完成输入/输出。
DOS 功能调用就是为诸如此类的目的设置的。DOS 功能调用要求在进入 INT 21H 调用前,
首先将功能调用号送 AH 寄存器,并根据功能调用号准备初始数据。也就是说 INT 21H 的 2
号功能调用是输出 DL 寄存器中的字符。INT 20H 是 BIOS 中断服务,这一软中断用来正常结
束程序。
运行步骤:
(1)进入 DEBUG
设 C 盘上有 DEBUG.COM 程序,进入 DOS 环境后键人 DEBUG,即
C:\>DEBUG
随后屏幕显示:
_
“_”号是进入 DEBUG 的提示符,在该提示符下可键入任意 DEBUG 命令。现在用 A 命
令输入程序如下:
(2)输入程序并汇编
_A 100
169C:0100
169C:0102
169C:0104
169C:0106
169C:0108
MOV
MOV
INT
INT
DL,33
AH,2
2l
20
至此程序已输入完毕,并汇编成机器指令。现在用 G 命令运行程序如下:
8
(3)运行程序
_G
3
Program terminated normally
如果现在想分析一下该程序的指令,可以用反汇编命令 U 作如下操作:
(4)反汇编
_U 100,108
169C:0100
169C:0102
169C:0104
169C:0106
169C:0108
B233
B402
CD21
CD20
MOV
MOV
INT
INT
DL,33
AH,02
21
20
(5)将机器指令程序送到起始地址为 200H 的若干单元
_E 200 B2,33,B4,02,CD,21,CD,20
(6)执行机器指令程序
_G=200
3
Program terminated normally
二、常用 DEBUG 命令
DEBUG 命令是在命令提示符“_”下由键盘键入的。每条命令以单个字母的命令符开头,
然后是命令的操作参数,操作参数与操作参数之间,用空格或逗号隔开,操作参数与命令符之
间用空格隔开,命令的结束符是回车键(ENTER)。命令及参数的输入可以是大小写的结合。
Crtl+Break 键可中止命令的执行。Crtl+NumLock 键可暂停屏幕卷动,按任一键继续。所用的
操作数均为十六进制数,不必写 H。
1.汇编命令 A
格式: (1)A <段寄存器名>:<偏移地址>
(2)A <段地址>:<偏移地址>
(3)A <偏移地址>
(4)A
功能:汇编命令是将用户输入的汇编语言指令,汇编为可执行的机器指令。键人该命令
后显示段地址和偏移地址并等待用户从键盘逐条键入汇编语言指令。每当输入一行语句后按
“ENTER”键,输入的语句有效。若输入的语句中有错,DEBUG 会显示“^ Error”,要求用
户重新输入,直到显示下一地址时用户直接键入回车键返回到提示符“_”。