《汇编语言程序设计》 实验指导书2012.5.24)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《汇编语言程序设计》课程实验指导书(Assembly Language Programming)
计算机科学与技术系
杨定安编写
佛山科学技术学院
2012 年 5 月
摘要
汇编语言实验主要使学生掌握DEBUG或DEB2000调试程序中各命令的使用方法,掌握MASM汇编程序对汇编语言源程序进行编辑、汇编、连接、装配、调试到运行的上机操作方法。本实验大纲要求学生熟练掌握汇编语言指令练习、顺序程序设计、分支程序设计、循环程序设计和子程序设计。
目录
实验一宏汇编程序(MASM)及汇编语言上机过程 (4)
实验二程序的基本结构练习 (8)
实验三汇编编译器的使用及程序调试 (11)
实验四分支程序设计 (17)
实验五循环程序设计 (19)
实验六子程序设计 (23)
实验七汇编语言与C语言混合程序设计 (29)
实验一宏汇编程序(MASM)及汇编语言上机过程
一、实验目的
1.通过实验了解和熟悉微机系统的配置。
2.学习在DEBUG状态下输入汇编源程序的方法。
3.初步掌握调试(在DEBUG状态下)的过程。
二、实验原理
1. 本实验要求在DEBUG状态下输入汇编源程序,并用DEBUG命令进行调试。用单步跟踪的方法验证指令的功能。
2. 以下是给定的参考程序,并在实验时在每条指令的“;”符号右边按要求填写指令的执行结果。
注:⑴微机进入DEBUG状态下之后,一切立即数和地址数据均被默认为十六进制数,在输入时数的后面不加后缀“H”;
⑵在DEBUG状态下执行程序时,“INT 20H”指令可使系统执行完该指令前的程序时返回到“-”提示符状态,并且恢复CS和IP寄存器原来的值。
三、实验仪器
微机一台,U盘一块。
四、实验步骤
1.开机和关机操作顺序
开机:先打开微机外部设备电源开关,如显示器,最后打开主机电源开关。
关机:与开机相反,先关掉主机电源开关,然后关闭所有外设的电源开关。
2. 装入DEBUG程序
若计算机系统启动正常,可以进入MASM文件夹或MASM5文件夹从磁盘上调用DEBUG,程序到内存。如是WINDOWS环境下,先运行CMD命令,然后运行CD MASM命令,再运行DEB2000命令。一般C盘上装有DEBUG和DEB2000软件,若没有,可以用复制命令从其它盘拷贝过来,然后从装有DEBUG和DEB2000软件的磁盘上调用DEBUG和DEB2000软件程序。例如:
C :\MASM> DEB2000↙(↙回车符)
-(-DEBUG 提示符)
当显示器出现提示符“-”时,说明已进入DEBUG状态,这时,可用DEBUG命令进行操作。
4. 用DEBUG的Register命令检查所有寄存器内容,并作记录。命令格式:
R [寄存器名]
检查和修改寄存器内容的命令R,它有三种方式:
1)显示CPU内部所有寄存器内容和标志位状态;格式为:-R
R命令显示中标志位状态的含义如下表所示:
标志名置位复位
溢出Overflow(是/否)OV NV
方向Direction(减量/增量)DN UP
中断Interrupt(允许/屏蔽)EI DI
符号Sign(负/正)NG PL
零Zero(是/否)ZR NZ
辅助进位Auxiliary Carry(是/否)AC NA
奇偶Parity(偶/奇)PE PO
进位Carry(是/否)CY NC 2)显示和修改某个指定寄存器内容,格式为:
-R 寄存器名
例如打入:-R AX
系统将响应如下:
AX FIF4
:
表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如:
-R BX
BX 0369
:059F
则BX内容由0369改为059F
3)显示和修改标志位状态,命令格式为:
-RF
系统将给出响应,如
OV DN EI NG ZR AC PE CY-
这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。如
OV DN EI NG ZR AC PE CY-PONZDINV
5. 用DEBUG的Assemble命令输入汇编源程序。格式:
A [内存地址]
注:用“[ ]”符号括起来的部分表示可以省略。
该命令的功能是从指定的内存地址开始(括号不要输入)逐条输入汇编语言源程序并汇编成机器码存入内存。若地址缺省,则接上一个A命令最后一条指令之后输入汇编语句,若没有用过A 命令,则从CS:0100H地址开始输入。例如:
-A
0CD3:0100-
在输入A命令之后,或每输入一条指令之后,显示器的左端给出了内存的段地址和偏移地址。
每条指令均用回车(↙)结束。若输入的指令有语法错误,DEBUG拒绝接收,并给出提示,此时可以重新输入。程序的最后一条指令输入完之后,再按一次回车键(↙),即可结束汇编命令,回到DEBUG提示符“-”状态。
6. 用DEBUG的Unassemble命令反汇编。命令格式:
U [起始地址[终止地址]]
该命令的功能是从起始地址到终止地址反汇编目标码,缺省值是接上一个U命令或从CS:
0100H地址开始。例如:
-U
显示器上将显示程序的内存地址、指令机器码的汇编源程序三列对照清单。
7. 用DEBUG的Trace命令单步跟踪程序。命令格式:
T [ =起始地址] [指令条数] 注意:=符号不能缺
该命令的功能是从指定的起始地址开始逐条执行指令,每执行完一条指令,屏幕显示所有寄存器内容和下一条指令地址和指令。若[=起始地址]缺省,则T命令从CS:IP地址开始执行指令。
例如:
-T↙
重复这一过程,即可看到每条指令执行后,所有寄存器和标志寄存器的标志位内容。此时,要检查内存单元的数据,可用DEBUG的Dump命令,命令格式:
D[起始地址[终止地址]]
该命令的功能是从起始地址到终止地址,连续显示存贮器单元的内容。若地址缺省,则接上一个D命令或从DS:0100H地址开始显示。例如:
-D↙
参考程序:
MOV AX, 2000 ; AL=
MOV DS, AX ; DS=
NOT AX ; AX=
XOR AX, AX ; AX=
DEC AX ; AX=
INC AX ; AX=
MOV BX, 2030 ; BH=
MOV SI, BX ; SI=
MOV [SI], BL ; [2030H]=
MOV WORD PTR[SI], 10F ; [2030H]= [2031H]=
MOV DI, SI ; DI=
MOV [DI+50], BH ; [DI+50H]=
MOV BH, [SI] ; BH=
MOV BL, [DI+50] ; BL=
MOV SP, 5000
PUSH AX ; AX= [SS:4FFEH]= [SS:4FFFH]=
PUSH BX ; BX= [SS:4FFCH]= [SS:4FFDH]=
POP AX ; AX=
POPF ; F=
NEG BX ; BX=