《DEBUG教程-主要命令》由会员分享,可在线阅读,更多相关《DEBUG教程-主要命令(9页珍藏版)》请在金锄头文库上搜索。
1、DEBUG 教程(主要命令)教程(主要命令)DEBUG 教程(主要命令)教程(主要命令)显示存储单元内容修改存储单元内容检查和修改寄存器的内容运行命令跟踪命令汇编命令反汇编命令命名命令装入命令写命令退出 DEBUGDEBUG 命令格式 DEBUG 命令集 调试程序调试程序 DEBUG 的特点:的特点: 1.在受控环境中测试程序; 2.装入,显示或修改任何文件; 3.执行 DOS 程序; 4.完成磁盘实际读/写操作; 5.建立或汇编汇编语言程序。 DEBUG 的命令格式:的命令格式: drive:path DEBUG d:pfilename.extparam.其中: drive: 是指定 DEB
2、UG 文件的磁盘驱动器标识符,DEBUG 是外部 DOS 命令,所以必须把它从磁盘读入内存。 若未指定,DOS 将使用当前默认磁盘驱动器。 path: 是 DOS 查找 DEBUG 文件的一个子目录串表示的路径。若未指定,DOS 将使用当前工作目录。d: 是 DEBUG 将要调试的文件所在的磁盘驱动器。p: 是查找 DEBUG 将要调试的文件所需的子目录路径,若未指定,DOS 使用当前目录。filename.ext 是 DEBUG 将要调试的文件名。param 是将被调试的程序(或文件)的命令行参数。附:DEBUG 所完成的初始化动作,假定文件名没有,启动 DEBUG:段寄存器 CS、DS、E
3、S 和 SS 置为 DEBUG 程序后的第一个段。 指令指针寄存器 IP 置为 100H(程序段前缀 PSP 后的第一个语句)。 堆栈指针 SP 置为段末或 COMMAND.COM 暂驻部分的结束地址(其中较小的那个地址)。 其余通用寄存器均置为 0,标志寄存器置为下述状态。 NV UP EI PL NE NA PO NC 如果 DEBUG 命令行含有文件名,段寄存器 DS 和 ES 指向 PSP。寄存器 BX 和 CX 含有程序长度。DEBUG 使用单字符命令:使用单字符命令: 命令命令格式格式命令命令格式格式汇编A 地址命名N 设备:路径文件名.扩展名比较C 范围输出O 口地址转出D 范围
4、或地址继续执行P =地址值键入E 地址表退出Q填入F 范围表寄存器R 寄存器执行G =地址地址地址.搜索S 范围表十六进制H 值 值跟踪T =地址或范围输入I 口地址反汇编U 地址或范围装入L 地址设备扇区,扇区写W 地址设备扇区,扇区移动M 范围 地址 这些 DEBUG 命令主要参考清华大学计算机系列教材清华大学计算机系列教材IBM-C 汇编语言程序设计汇编语言程序设计一书。 显示存储单元的命令显示存储单元的命令 D(DEBUG),格式为:),格式为:- Daddress或- Drange例如,按指定范围显示存储单元内容的方法为: -D 100 120 067C:0100 C7 D7 0D
5、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 .ABCDEFGHIJKLMNO067C:0120 8B 其中 0100 至 0120 是 DEBUG 显示的单元内容。 左边用十六进制表示每个字节,右边用 ASCII 字符表示每 个字节,“.”表示不可显示的字符。这里没有指定段地址, D 命令自动显示 DS 段的内容。如果只指定首地址,则 显示从首地址开始的 80 个字节的内容。如果完全没有指定地址,则显示上一个 D 命令
6、的最后一个单元的内容。 这里顺便提一下存储器及其地址的分段。计算机存储信息的基本单位是一个二进制位,一位可存储一个二进制数:0 或 1。每 8 位组成一个字节,位编 号如下所示:76543210正当 MS-DOS 盛行的时候,PC 机的字长为 16 位,由 2 个字节组成,位编号如下所示:字1514 13 12 11109876543210字节7654321076543210高位字节高位字节 MSB低位字节低位字节 LSB在存储器里以字节为单位存储信息。为了正确地存放或取得信息,每一个字节单元给以一个存储器地址。地址从 0 开始编号,顺序地每次加 1。在机器里,地址也是用二进制数来表示的。它是
7、无符号整数,书写格式为十 六进制。16 位二进制可以表示 2 的 16 次方个字节单元的地址,它可表示的地址范围应该是 0-65535。为方便,存储器 的容量以 2 的 10 次方=1024 为基本单位,称为 1K。这样,65536 个字节单元的存储容量就是 64K,其地址编号 的范围用 16 进制数表示为 0-FFFFH。如下所示。0000,0001,0002,0009,000A,000B,000C,000D,000E,000F, 0010,0011,0012,0019,001A,001B,001C,001D,001E,001F, 0020,0021,0022,0029,002A,002B,
8、002C,002D,002E,002F, FFE0,FFE1,FFE2,FFE9,FFEA,FFEB,FFEC,FFED,FFEE,FFEF, FFF0,FFF1,FFF2,FFF9,FFFA,FFFB,FFFC,FFFD,FFFE,FFFF。一个字存入存储器要占有相继的二个字节,存放时,低位字节存入低地址,高位字节存入高地址,以相反的 次序存入的。 存储器的特点:存储器的特点:它的内容是取之不尽的。从某个单元取出其内容后,该单元仍然保存着原来的内容不变,可以 重复取出,只有存入新的信息之后,原来保存的内容自动丢失。 存储器地址的分段:存储器地址的分段: 前面已经提到 16 位字长的机器可以访
9、问最大存储空间为 64K 字节,而 PC 机的最大存储容量为 1M(原 MS- DOS 操作系统下)。要访问 1M 字节空间的存储器必须有 20 位地址,用 16 进制数表示 1M 字节的地址范围应该 为 00000-FFFFF。 在 1M 字节的存储器里,每一个存储单元都有一个唯一的 20 位地址,称为该存储单元的物理地址。CPU 访 问存储器时,必须先确定所要访问的存储单元的物理地址才能取得(或存入)该单元的内容。20 位物理地址由 16 位段地址和 16 位偏移地址组成,段地址是指每一段的起始地址,由于它必须是小段的首地址,所以其低 4 位 一定是 0,这样就可以规定段地址只取段起始地址
10、的高 16 位值。偏移地址则是指在段内相对于段起始地址的偏移 值。这样,物理地址的计算方法如下: 把段地址左移 4 位再加上偏移地址值就形成物理地址。或写成: 16dX 段地址+偏移地址=物理地址 每个存储单元只有唯一的物理地址,但它却可由不同的段地址和不同的偏移地址组成。 在 PC 机中,有四个专门存放段地址的寄存器,称为段寄存器。它们是代码段 CS(Code Segment)、数据段 DS(Data Segment)、堆栈段 SS(Stack Segment)和附加段 ES(Extra Segment)寄存器。每个段寄存器可 以确定一个段的起始地址,而这些段则各有各的用途。代码段是存放当前
11、正在运行的程序。数据段存放当前运行 程序所用的数据,如果程序中使用了串处理指令,则其源操作数也存放在数据段中。堆栈段定义了堆栈的所在区 域,堆栈是一种数据结构,它是一个比较特殊的数据段。附加段是附加的数据段,它是一个辅助的数据区,也是 串处理指令的目的操作数存放区。还有四个通用数据寄存器 AX、BX、CX、DX;四个指针及变址寄存器SP、BP、SI、DI;控制寄存器包括 IP(指令指针寄存器)和 PSW 程序状态字寄存器。这些将专门开辟一页详 加介绍。 修改修改存储单元内容的命令有两种存储单元内容的命令有两种输入命令 E(Enter),有两种格式如下: 第一种格式可以用给定的内容表来替代指定范
12、围的存储单元内容。命令格式为:-E address list例如,-E DS:100 F3XYZ8D其中 F3,X,Y,Z和 8D 各占一个字节,该命令可以用这五个字节来替代存储单元 DS:0100 到 0104 的 原先的内容。第二种格式则是采用逐个单元相继修改的方法。命令格式为:-E address例如,-E CS:100则可能显示为:18E4:0100 89. -如果需要把该单元的内容修改为 78,则可以直接键入 78,再按空格键可接着显示下一个单元的内容,这样可 以不断修改相继单元的内容,直到 Enter 键结束该命令为止。填写命令 F(Fill),其格式为: -F range lis
13、t例如,-F 4BA:0100 5 F3XYZ8D使 04BA:0100-0104 单元包含指定的五个字节的内容。如果 list 中的字节数超过指定的范围,则忽略超过的 项;如果 list 的字节数小于指定范围,则重复使用 list 填入,直到填满指定的所有单元为止。 检查检查和修改寄存器内容的命令和修改寄存器内容的命令 R(Register),它有三种格式如下:),它有三种格式如下:显示 CPU 内所有寄存器内容和标志位状态,其格式为: -R例如,-rAX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=18E4
14、ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NC18E4:0100 C70604023801 MOV WORD PTR0204,0138 DS:0204=0000其中标志位状态的含义可见下表:标 志 名标志为 1标志为 0OFDFIFSFZFAFPFCF溢出(是/否) 方向(减量/增量)中断(允许/关闭)符号(负/正)零(是/否)辅助进位(是/否)奇偶(偶/奇)进位(是/否OV DNEINGZRACPECYNV UPDIPLNZNAPONC显示和修改某个寄存器内容,其格式为: -R register name例如,键入-r ax系统
15、将响应如下:AX F1F4:即 AX 寄存器的当前内容为 F1F4,如不修改则按 Enter 键,否则,键入欲修改的内容如:-r bxBX 0369 :059F 则把 BX 寄存器的当前内容修改为 059F。 显示和修改标志位状态,命令格式为: -RF系统将响应,如:OV DN EI NG ZR AC PE CY -此时如不修改其内容可按 Enter 键,否则,建入欲修改的内容,如:OV DN EI NG ZR AC PE CY - PONZDINV即可,键入的顺序是任意的。 运行运行命令命令 G(Go),其格式为:),其格式为:-G =address1address2address3 . 其中,地址 1 指定了运行的起始地址,如不指定则从当前的 CS:IP 开始运行。后面的地址均为断点地址,当 指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。 跟踪跟踪命令命令 T(Trace),有两种格式:),有两种格式:逐条指令跟踪 -T=address从指定地址