汇编语言实验指导书Word文件下载.docx
《汇编语言实验指导书Word文件下载.docx》由会员分享,可在线阅读,更多相关《汇编语言实验指导书Word文件下载.docx(75页珍藏版)》请在冰豆网上搜索。
DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
1、DEBUG程序的启动
DEBUG的命令格式:
[drive:
][path]DEBUG[d:
][p][filename][.ext][param...]
其中:
drive:
是指定DEBUG文件的磁盘驱动器标识符,DEBUG是外部DOS命令,所以必须把它从磁盘读入内存。
若未指定,DOS将使用当前默认磁盘驱动器。
path:
是DOS查找DEBUG文件的一个子目录串表示的路径。
若未指定,DOS将使用当前工作目录。
d:
是DEBUG将要调试的文件所在的磁盘驱动器。
p:
是查找DEBUG将要调试的文件所需的子目录路径,若未指定,DOS使用当前目录。
filename[.ext]是DEBUG将要调试的文件名。
param
是将被调试的程序(或文件)的命令行参数。
例如:
在DOS提示符下,可键入命令:
C>
debug
DEBUG所完成的初始化动作,假定文件名没有,启动DEBUG:
段寄存器CS、DS、ES和SS置为DEBUG程序后的第一个段。
指令指针寄存器IP置为100H(程序段前缀PSP后的第一个语句)。
堆栈指针SP置为段末或COMMAND.COM暂驻部分的结束地址(其中较小的那个地址)。
其余通用寄存器均置为0,标志寄存器置为下述状态。
NV
UP
EI
PL
NE
NA
PO
NC
如果在DOS提示符下,可键入命令,包含文件名:
debugname.exe
段寄存器DS和ES指向PSP。
寄存器BX和CX含有程序长度。
2、DEBUG的主要命令
(1)汇编命令A,格式为:
-A[地址]
该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。
-a
136B:
0100movax,100
0103movbx,200
0106movcx,300136B:
0109movdx,400
010C
-
(2)反汇编命令U,有两种格式:
1)-U[地址]
该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
-u
13C9:
00001EPUSHDS
00012BC0SUBAX,AX
000350PUSHAX
0004B8C313MOVAX,13C3
00078ED8MOVDS,AX
0009B8C613MOVAX,13C6
000C8EC0MOVES,AX
000E8D360000LEASI,[0000]
00128D3E0000LEADI,[0000]
0016FCCLD
0017B92800MOVCX,0028
001AF3REPZ
001BA4MOVSB
001CCBRETF
001D0000ADD[BX+SI],AL
001F0000ADD[BX+SI],AL
2)-U范围
该命令对指定范围的内存单元进行反汇编,
-u13c9:
000e001b
(3)运行命令G,格式为:
-G[=地址1][地址2[地址3。
。
]]
其中地址1规定了运行起始地址,后面的若干地址均为断点地址。
-g1c
AX=13C6BX=0000CX=0000DX=0000SP=FFFCBP=0000SI=0028DI=0028
DS=13C3ES=13C6SS=13C3CS=13C9IP=001CNVUPEIPLZRNAPENC
(4)追踪命令T,有两种格式:
1)逐条指令追踪:
-T[=地址]
该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。
-t
AX=0000BX=0000CX=007DDX=0000SP=FFFEBP=0000SI=0000DI=0000
DS=13B3ES=13B3SS=13C3CS=13C9IP=0001NVUPEIPLNZNAPONC
2)多条指令追踪:
-T[=地址][值]
该命令从指定地址起执行n条命令后停下来,n由[值]确定。
-t3
DS=13B3ES=13B3SS=13C3CS=13C9IP=0003NVUPEIPLZRNAPENC
AX=0000BX=0000CX=007DDX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=13B3ES=13B3SS=13C3CS=13C9IP=0004NVUPEIPLZRNAPENC
(5)显示内存单元内容的命令D,格式为:
-D[地址]或-D[范围]
-dds:
13C3:
00006161616161616161-6161616161616161aaaaaaaaaaaaaaaa
00106161616161616161-6161616161616161aaaaaaaaaaaaaaaa
00206161616161616161-0000000000000000aaaaaaaa........
00306161616161616161-6161616161616161aaaaaaaaaaaaaaaa
00406161616161616161-6161616161616161aaaaaaaaaaaaaaaa
00506161616161616161-0000000000000000aaaaaaaa........
00601E2BC050B8C3138E-D8B8C6138EC08D36.+.P...........6
007000008D3E0000FCB9-2800F3A4CB000000...>
....(.......
(6)修改内存单元内容的命令E,它有两种格式:
1)用给定的内容代替指定范围的单元内容:
-E地址内容表
例如:
-E2000:
0100F3“XYZ”8D
其中F3,“X”“Y”“Z”和8D各占一个字节,用这五个字节代替原内存单元2000:
0100到0104的内容,“X”“Y”“Z”将分别按它们的ASCII码值代入。
2)逐个单元相继地修改:
-E地址
例如:
-E100:
18E4:
010089.78
此命令是将原100号单元的内容89改为78。
78是程序员键入的。
(7)检查和修改寄存器内容的命令R,它有三种方式:
1)显示CPU内部所有寄存器内容和标志位状态;
格式为:
-R
R命令显示中标志位状态的含义如下表所示:
标志名
置位
复位
溢出Overflow(是/否)
OV
NV
方向Direction(减量/增量)
DN
UP
中断Interrupt(允许/屏蔽)
EI
DI
符号Sign(负/正)
NG
PL
零Zero(是/否)
ZR
NZ
辅助进位AuxiliaryCarry(是/否)
AC
NA
奇偶Parity(偶/奇)
PE
PO
进位Carry(是/否)
CY
NC
2)显示和修改某个指定寄存器内容,格式为:
-R寄存器名
例如打入:
-RAX
系统将响应如下:
AXFIF4
:
表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如:
-RBX
BX0369
:
059F
则BX内容由0369改为059F
3)显示和修改标志位状态,命令格式为:
-RF
系统将给出响应,如
OVDNEINGZRACPECY-
这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。
如
OVDNEINGZRACPECY-PONZDINV
(8)命名命令N,格式为:
-N文件名
此命令将文件名格式化在CS:
5CH的文件控制块内,以便使用L或W命令把文件装入内存进行调试或者存盘。
(9)装入命令L,它有两种功能:
1)把磁盘上指定扇区的内容装入到内存指定地址起始的单元中,格式为:
-L地址驱动器扇区号扇区数
2)装入指定文件,格式为:
-L[地址]
此命令装入已在CS:
5CH中格式化的文件控制块所指定的文件。
在用L命令前,BX和CX中应包含所读文件的字节数。
(10)写命令W,有两种格式:
1)把数据写入磁盘的指定扇区:
-W地址驱动器扇区号扇区数
2)把数据写入指定文件中:
-W[地址]
此命令把指定内存区域中的数据写入由CS:
5CH处的FCB所规定的文件中。
在用W命令前,BX和CX中应包含要写入文件的字节数。
(11)退出DEBUG命令Q,该命令格式为
Q
它退出DEBUG程序,返回DOS,但该命令本身并不把在内存中的文件存盘,如需存盘,应在执行Q命