DEBUG使用介绍
?调试程序DEBUG特点:
1. | 在受控环境中测试程序; |
?DEBUG命令格式:
[drive:][path]DEBUG[d:][p][filename][.ext][param...]
其中: | |
DOS 将使用目前默认磁盘驱动器。 | |
path: 是DOS查找DEBUG文件一个子目录串表示路径。若
未指定,DOS 将使用目前工作目录。
d: 是DEBUG将要调试文件所在磁盘驱动器。
p:是查找DEBUG将要调试文件所需子目录路径,若未指定,
DOS使用目前目录。
filename[.ext]是DEBUG将要调试文件名。
param 是将被调试程序(或文件)命令行参数。 | |
附:
DEBUG所完成初始化动作,假定文件名没有,开启DEBUG:
?段寄存器CS、DS、ES和SS置为DEBUG程序后第一个段。
?指令指针寄存器IP置为100H(程序段前缀PSP后第一个语句)。?堆栈指针SP置为段末或COMMAND.COM暂驻部分结束地址(其中 较小那个地址)。
?其它通用寄存器均置为0,标志寄存器置为下述状态。
? NV UP EI PL NE NA PO NC
假如DEBUG命令行含有文件名,段寄存器DS和ES指向PSP。寄存器BX
和CX含有程序长度。
? | DEBUG 使用单字符命令: |
| |
这些DEBUG命令关键参考清华大学计算机系列教材《IBM-C汇编语言程序设计》一书。
| |
-D[address]或
-D[range]
比如,按指定范围显示存放单元内容方法为:
-D100 120
067C:0100 C7 D7 0D 0A 32 33 33 34 - D5 C5 B4 C6 30 10 42
0C ....2334....0.B.
067C:0110 03 41 42 43 44 45 46 47 - 48 49 4A 4B 4C 4D 4E
4F .ABCDEFGHIJKLMNO
067C:0120 8B
其中0100至0120是DEBUG显示单元内容。左边用十六进制表示每
个字节,右边用ASCII字符表示每个字节,“.”表示不可显示字符。这里没
从首地址开始80 个字节内容。假如完全没有指定地址, 则显示上一个D 命 |
计算机存放信息基础单位是一个二进制位,一位可存放
一个二进制数:0 或1。每8位组成一个字节,位编号以下
所表示:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
正当MS-DOS盛行时候,PC机字长为16位,由2个字节组成,位编号以
下所表示:
字 | 15 14 13 12 11 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
| |||||||||
字节 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
高位字节 MSB | 低位字节 LSB | |||||||||||||||
在存放器里以字节为单位存放信息。为了正确地存放或取得信息,每一个字节单元给以一
个存放器地址。地址从0开始编号,次序地每次加1。在机器里,地址也是用二进制数来
表示。它是无符号整数,书写格式为十六进制。
16位二进制能够表示216次方个字节单元地址,它可表示地址范围应该是0-65535。
为方便,存放器容量以210次方=1024为基础单位,称为1K。这么,65536 个字节单元存放
容量就是K,其地址编号范围用16进制数表示为0-FFFFH。以下所表示。
0000,0001, 0002, ……, ……, ……0009, 000A, 000B, 000C, 000D, 000E,
000F,
0010,0011, 0012, ……, ……, ……0019, 001A, 001B, 001C, 001D, 001E,
0020, 0021, 0022, ……, 002C, 002D, 002E, 001F, |
……
FFE0,FFE1, FFE2, ……, ……, ……FFE9, FFEA, FFEB, FFEC, FFED, FFEE,
FFEF,
FFF0,FFF1, FFF2, ……, ……, ……FFF9, FFFA, FFFB, FFFC, FFFD, FFFE,
FFFF。
一个字存入存放器要占有相继二个字节,存放时,低位字节存入低地址,高位字节存入
高地址,以相反次序存入。
存放器特点: 它内容是取之不尽。 从某个单元取出其内容后, 该单元仍然保留着原来内 |
存放器地址分段:
前面已经提到16位字长机器能够访问最大存放空间为K字节,而PC机最大存放容量为1M(原MS-DOS操作系统下)。要访问1M字节空间存放器必需有20位地址,用16进制数表示1M字节地址范围应该为00000-FFFFF。
在1M字节存放器里,每一个存放单元全部有一个唯一20位地址,称为该存放单元物理地址。CPU访问存放器时,必需先确定所要访问存放单元物理地址才能取得(或存入)该单元内容。20位物理地址由16位段地址和16位偏移地址组成,段地址是指每一段起始地址,因为它必需是小段首地址,所以其低4位一定是0,这么就能够要求段地址只取段起始地址高16位值。偏移地址则是指在段内相对于段起始地址偏移值。这么,物理地址计
算方法以下: | 16dX |
| |
移地址组成。
在PC机中,有四个专门存放段地址寄存器,称为段寄存器。它们是代码段CS(CodeSegment)、数据段DS(DataSegment)、堆栈段SS(StackSegment)和附加段ES(ExtraSegment)寄存器。每个段寄存器能够确定一个段起始地址,而这些段则各有各用途。代码段是存放目前正在运行程序。 数据段存放目前运行程序所用数据,假如程序中使用了串处理指令,则其源操作数也存放在数据段中。堆栈段定义了堆栈所在区域,堆栈是一个数据结构,它是一个比较特殊数据段。附加段是附加数据段,
它是一个辅助数据区, 也是串处理指令目标操作数存放区。 还有四个通用 |
控制寄存器包含IP(指令指针寄存器)和PSW程序状态字寄存器。这些将
专门开辟一页详加介绍。
| ||
? | 输入命令E(Enter), 有两种格式以下: | |
第一个格式能够用给定内容表来替换指定范围存放单元内容。命令格
式为:
-E address [list]
比如,-E DS:100 F3'XYZ'8D
其中F3, ‘X’, ‘Y’, ‘Z’和8D 各占一个字节, 该命令能够用这五 |
比如,-E CS:100
则可能显示为:
18E4:0100 . -
假如需要把该单元内容修改为78,则能够直接键入78,再按空格键可
接着显示下一个单元内容,这么能够不停修改相继单元内容,直到Enter键
结束该命令为止。
? | 填写命令F(Fill), 其格式为: |
|
-F range list
比如,-F 4BA:0100 5 F3'XYZ'8D
使04BA:0100-0104 单元包含指定五个字节内容。假如list中字节数超出指定范围,则忽略超出项;假如list字节数小于指定范围,则反复使用list填入,直到填满指定全部单元为止。
| ||
? | 显示CPU 内全部寄存器内容和标志位状态, 其格式为: | |
-R
比如, -r | |
| |
DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PONC
18E4: 0100 C MOV WORD PTR[0204], 0138 DS:0204=0000
其中标志位状态含义可见下表:
|
ZF AF PF CF | 零(是/否) 辅助进位(是/否) 奇偶(偶/奇) 进位(是/否 | ZR AC PE CY | NZ NA PO NC |
? | 显示和修改某个寄存器内容, 其格式为: |
-R register name
比如,键入
-r ax
系统将响应以下: | |
AX F1F4 | |
| |
修改内容如:
-r bx
BX 0369
:059F
则把BX寄存器目前内容修改为059F。
? | 显示和修改标志位状态, 命令格式为: | |
-RF | ||
系统将响应, 如: | |
OVDN EI NG ZR AC PE CY -
此时如不修改其内容可按Enter键,不然,建入欲修改内容,如:
OVDN EI NG ZR AC PE CY - PONZDINV
即可,键入次序是任意。
☆运行命令G(Go), 其格式为: |
其中,地址1指定了运行起始地址,如不指定则从目前CS:IP开始运行。后面地址均为断
点地址,当指令实施到断点时,就停止实施并显示目前全部寄存器及标志位内容,和下一条
将要实施指令。
| |||
? | 逐条指令跟踪 | | |
-T[=address] | |||
| |||
? | 多要指令跟踪 | ||
-T[=address][value]
从指定地址起实施n条指令后停下来,n 由value指定。
☆汇编命令A(Assemble), 其格式为: |
-A[address]
该命令许可键入汇编语言语句, 并能把它们汇编成机器代码, 相继地存放在从指定地址开始存放区中。 必需注意: DEBUG 把键入数字均看成十六进制数, 所以如要键入十进制数, | |
则其后应加以说明, 如100D。 | |
| ||
? | 从指定地址开始, 反汇编32 个字节, 其格式为: | |
-U[range]
比如:
-u100
18E4:0100 C MOV WORD PTR[0204],0138
18E4:0106 C7060602 MOV WORD PTR[0206],0200
18E4:010C C7060802 MOV WORD PTR[0208],0202
18E4:0112 BB0402 MOV BX,0204
18E4:0118 CD20 INT 20 |
18E4:011D 57 PUSH DI
18E4:011E 8B37 MOV SI,[BX]
假如地址被省略则从上一个U命令最终一条指令下一个单元开始显示32个字节。
? 对指定范围内存放单元进行反汇编,格式为:
-U[range]
比如: -u 100 10C | |
18E4:0100 C MOV WORD PTR[0204],0138
18E4:0106 C7060602 MOV WORD PTR[0206],0200
18E4:010C C7060802 MOV WORD PTR[0208],0202
或
-u100 112
18E4:0100 C MOV WORD PTR[0204],0138
18E4:0106 C7060602 MOV WORD PTR[0206],0200
18E4:010C C7060802 MOV WORD PTR[0208],0202
这两种格式是等效。
-N filespecs [filespecs] |
[d:][path] filename[.ext]
比如:
-N myprog
-L
-
可把文件myprog 装入存放器。
| ||
? | 把磁盘上指定扇区范围内容装入到存放器从指定地址开始区域中。其格式为: | |
-L[address[drive sector sector]]
? 装入指定文件,其格式为:
-L[address]
此命令装入已在CS:5CH 中格式化了文件控制块所指定文件。如未指定地址,则装入CS:0100开始存放区中。
| ||
? | 把数据写入磁盘指定扇区。其格式为: | |
-W [address] | ||
此命令把指定存放区中数据写入由CS:5CH处文件控制块所指定文件中。如未指定地址则数据从CS:0100 开始。要写入文件字节数应先放入BX和CX中。
☆退出DEBUG 命令Q(Quit), 其格式为: |
-Q
它退出DEBUG, 返回DOS。本命令无存盘功效, 如需存盘应先使用W命令。
Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务