2024年6月8日发(作者:)
.
实验一 DEBUG命令的功能及使用
一、实验目的
掌握汇编语言基本运行环境和熟悉DEBUG调试程序的命令。包括:学习使用指令,掌
握常用的指令功能和简单程序设计;掌握DEBUG调试程序的命令,熟悉程序输入、存储器
和CPU寄存器及标志位的检查方法,单步、断点、连续等运行程序的调试方法。
二、实验内容
DEBUG的主要命令功能与格式
1. 汇编命令A
格式:A [[<段寄存器名>/<段地址>:] <段内偏移>]
上式等价于:
(1)A <段寄存器名>:<段内偏移>
(2)A <段地址>:<段内偏移>
(3)A <段内偏移>
(4)A
功能:键入该命令后显示段地址和段内偏移并等待用户从键盘逐条键入汇编命令,逐条
汇编成代码指令,顺序存放到段地址和段内偏移所指定的内存区域,直到显示下一地址时用
户直接键入回车键返回到提示符“-”。
注:其中(1)用指定段寄存器的内容作段地址,(3)用CS的内容作段地址,(4)以
CS:100作地址。以后命令中提及的各种‘地址’形式,均指(1)、(2)、(3)中A后的地
址形式。
2. 显示内存命令D
格式:D [<地址>/<范围>]
上式等价于:
(1)D <地址>
(2)D <范围>
(3)D
功能:以两种形式显示指定范围的内存内容。一种形式为十六进制内容,一种形式为以
相应字节的内容作为ASCII码的字符,对不可见字符以‘.’代替。
注:其中(1)以CS为段寄存器。(3)显示CS:100起始的一片内容。
3. 修改内存命令E
格式:E <地址> [<单元内容表>]
上式等价于:
(1)E <地址>
.
.
(2)E <地址> <单元内容表>
其中<单元内容表>是以逗号分隔的十六进制数,或用’或”括起来的字符串,或者是二者
的组合。
功能:(1)不断显示地址,可连续键入修改内容,直至新地址出现后键入回车Enter为
止。(2)将<单元内容表>逐一写入由<地址>开始的一片单元。
4. 填充内存命令F
格式:F <范围> <单元内容表>
功能:将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。
例如:-F 5BC:200 L 10 B2,‘XYZ’,3C
5. 执行命令G
格式:G [=<地址>[,<断点>]]
上式等价于:
(1)G
(2)G=<地址>
(3)G=<地址>,<断点>
功能:执行内存中的指令序列
注:(1)从CS:IP所指处开始执行
(2)从指定地址开始执行
(3)从指定地址开始执行,到断点自动停止。
6. 内存搬家命令M
格式:M <源地址范围> <目标起始地址>
其中源及目标地址若仅输入偏移量,则隐含相对DS。
功能:把<源地址范围>中的内容顺序搬至<目标起始地址>起的一片连续单元。
例如:-M CS:100 110 600
把从CS:100起至CS:110止17个字节搬至DS:600至DS:610的一片单
元。
7. 结束DEBUG返回DOS命令Q
格式:Q
功能:返回DOS提示符下
8. 显示修改寄存器命令R
格式:R [<寄存器名>]
上式等价于:
(1)R
(2)R <寄存器名>
功能:(1)显示当前所有寄存器内容,状态标志及将要执行的下一指令的地址,代码及
汇编语句形式。其中对状态标志FLAG以每位的形式显示,见下表。
.
.
标志
溢出OF
方向DF
中断IF
符号SF
零位ZF
辅助AF
奇偶PF
进位CF
置位符号
OV(overflow)
DN(down)
EI(enable interrupt)
NG(negative)
ZR(zero)
AC(auxiliary carry)
PE(parity even)
CY(carry)
复位符号
NV(no overflow)
UP(up)
DI(disable interrupt)
PL(plus)
NZ(no zero)
NA(no auxiliary)
PO(parity odd)
NC(no carry)
(2)显示指定寄存器内容
例如:-R AX
-R F
9. 执行并显示系统环境命令T
格式:T [=<地址>] [<条数>]
功能:执行由指定地址起始的、由<条数>指定的若干条命令。其中<地址>的缺省值是
当前IP值,<条数>的缺省值是一条。
例如:-T
-T 10
10. 反汇编命令U
格式:U [<地址>/<地址范围>]
上式等价于:
(1)U <地址>
(2)U <地址范围>
(3)U
功能:将指定范围内的代码以汇编语句形式显示,同时显示地址及代码。注意,反汇编
时一定确认指令的起始地址后再作,否则将得不到正确结果。地址及范围的缺省值是上次U
指令后下一地址的值。这样可以连续反汇编。
三、实验例程及步骤
例1 在DEBUG下运行如下程序。
MOV DL,33H ;字符3的ASCII码送DL
MOV AH,2 ;使用DOS的2号功能调用
INT 21H ;进入功能调用,输出‘3’
INT 20H ;BIOS中断服务程序,正常结束。
该程序运行结果是在显示器上输出一个字符‘3’。如果要输出其它字符,请改变程序中
‘33H’为相应字符的ASCII码。
运行步骤:
(1)进入DEBUG,用A命令送程序并汇编,见图1.1。
.
.
图1.1 汇编程序过程
(2)用反汇编U命令显示程序,图1.2为反汇编命令显示结果。图中右边是汇编指令,
中间是该汇编指令的机器码,左边是存放该条指令的内存单元地址。
图1.2 反汇编命令U的显示结果
(3)用执行命令G执行程序,图1.3为执行结果。
图1.3 执行命令G的显示结果
(4)用E命令送机器指令程序并用D命令显示内存,运行过程见图1.4。
.
.
图1.4 送机器指令并显示内容结果
(5)再次用执行命令G执行程序,图1.5为执行结果。
图1.5 G命令执行结果
(6)Q命令退出DEBUG返回DOS。
例2 在DEBUG下运行下述程序,查看执行结果。
MOV AX,0FEH ;被乘数0FEH送AX
MOV CL,2
SHL AX,CL ;被乘数乘以4,结果送AX
MOV BX,AX ;被乘数乘以4的结果送BX保留
MOV CL,2
SHL AX,CL ;被乘数乘以16,结果送AX
ADD AX,BX ;被乘数乘以20,结果在AX中
MOV [300H],AX ;将积存入DS段第300H—301H号内存单元
MOV AH,4CH ;将功能号4CH送AH
INT 21H ;执行DOS的4CH号功能调用,结束程序返回DOS。
该程序运行结果是将0FEH乘以14H,结果放在DS段第300H-301H号内存单元中。
(1)进入DEBUG,显示300H至301H号内存单元内容,见图1.6。
.
.
图1.6 D命令显示结果
(2)用A命令装入程序段并汇编,见图1.7。
图1.7 用A汇编程序
(3)用T命令执行到断点处(程序正常结束前)停止,执行“-T=100,8
的结果见图1.8。
图1.8 用T命令执行到断点处的结果
(4)用D命令显示300H至301H的内容(最终结果),如图1.9所示。
.
.
图1.9 用D命令显示最终结果
(5)用Q命令退出DEBUG环境,返回DOS。
四、预习要求
1. 安装并熟悉ASM汇编语言编译环境。
2. 预习DEBUG的相关命令。
3. 复习教材指令系统章节内容,熟悉8086/8088指令系统。
五、实验报告要求及思考
1. 根据实验描述汇编语言的编译过程,并画出相关流程框图;书写对教材指令系统等
相关的实验结果。
2. 总结Debug调试程序的方法。
3. 思考题。下面是一个2字节非压缩BCD码加的程序,试分析程序中被加数和加数以
及和分别存放在哪些寄存器中,程序中CH有何作用。阅读后再设计一个2字节非压缩BCD
码减法程序。然后分别计算56+98=?,90-15=?,并查看各寄存器的内容。
MOV CH,AH
ADD AL,BL
AAA
XCHG AL,CH
ADC AL,BH
AAA
MOV AH,AL
MOV AL,CH
.


发布评论