汇编语⾔DEBUG程序的使⽤(留给的⾃⼰看吧)
⽬录
⼀、在DOS的提⽰符下,可如下键⼊Debug启动调试程序:
DEBUG  [路径\⽂件名] [参数1] [参数2]
Debug后可以不带⽂件名,仅运⾏Debug程序;需要时,再⽤N和L命令调⼊被调试程序。命令中可以带有被调试程序的⽂件名,则运⾏Debug的同时,还将指定的程序调⼊主存;参数1/2是被调试程序所需要的参数。
在Debug程序调⼊后,根据有⽆被调试程序及其类型相应设置寄存器组的内容,发出Debug的提⽰符“-”,此时就可⽤Debug命令来调试程序。
运⾏Debug程序时,如果不带被调试程序,则所有段寄存器值相等,都指向当前可⽤的主存段;除SP之外的通⽤寄存器都设置为0,⽽SP指⽰当前堆栈顶在这个段的尾部;IP=0100h;状态标志都是清0状态。
运⾏Debug程序时,如果带⼊的被调试程序扩展名不是.EXE,则BX.CX包含被调试⽂件⼤⼩的字节数(BX为⾼16位),其他同不带被调试程序的情况。
运⾏Debug程序时,如果带⼊的被调试程序扩展名是.EXE,则需要重新定位。此时,CS : IP和SS : SP根据被调试程序确定,分别指向代码段和堆栈段。DS=ES指向当前可⽤的主存段,BX.CX包含被调试⽂件⼤⼩的字节数(BX为⾼16位),其他通⽤寄存器为0,状态标志都是清0状态。
⼆、DEBUG命令的格式
Debug的命令都是⼀个字母,后跟⼀个或多个参数: 字母 [参数]
命令的使⽤中注意:
① 字母不分⼤⼩写;
② 只使⽤16进制数,没有后缀字母;
③ 分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可⽆分隔符;
④ 每个命令只有按了回车键后才有效,可以⽤Ctrl+Break中⽌命令的执⾏;
⑤ 命令如果不符合Debug的规则,则将以“error”提⽰,并⽤“^”指⽰错误位置。
许多命令的参数是主存逻辑地址,形式是“段基地址 : 偏移地址”。其中,段基地址可以是段寄存器或数
值;偏移地址是数值。如果不输⼊段地址,则采⽤默认值,可以是缺省段寄存器值。如果没有提供偏移地址,则通常就是当前偏移地址。
对主存操作的命令还⽀持地址范围这种参数,它的形式是:“开始地址 结束地址”(结束地址不能具有段地址),或者是:“开始地址 L字节长度”。
三、DEBUG⼦命令
1、显⽰命令D
D(Dump)命令显⽰主存单元的内容,它的格式如下(注意分号后的部分⽤于解释命令功能,不是命令本⾝):
D [地址]      ;显⽰当前或指定开始地址的主存内容
D [范围]      ;显⽰指定范围的主存内容
例如,显⽰当前(接着上⼀个D命令显⽰的最后⼀个地址)主存内容:
左边部分是主存逻辑地址,中间是连续16个字节的主存内容(16进制数,以字节为单位),右边部分
是这16个字节内容的ASCII字符显⽰,不可显⽰字符⽤点“.”表⽰。⼀个D命令仅显⽰“8⾏×16个字节”(80列显⽰模式)内容。
再如:
-d 100              ;显⽰数据段100h开始的主存单元
-d cs:0              ;显⽰代码段的主存内容
-d 2f0 L 20          ;显⽰ds:2f0h开始的20h个主存数据
2、修改命令E
E(Enter)命令⽤于修改主存内容,它有两种格式:
E 地址          ;格式1,修改指定地址的内容
E 地址数据表    ;格式2,⽤数据表的数据修改指定地址的内容
格式1是逐个单元相继修改的⽅法。例如,键⼊“e ds:100”,Debug显⽰原来内容,⽤户可以直接输⼊新数据,然后按空格键显⽰下⼀个单元的内容,或者按“-”键显⽰上⼀个单元的内容;不需要修改可以直接按空格或“-”键;这样,⽤户可以不断修改相继单元的内容,直到⽤回车键结束该命令为⽌。
格式2可以⼀次修改多个单元,例如:
-e ds:100 F3`XYZ`8D    ;⽤F3/`X`/`Y`/`Z`/8D这5个数据替代DS:0100 ~ 0104的原来内容
3、填充命令F
F(Fill)命令⽤于对⼀个主存区域填写内容,同时改写原来的内容,其格式为:
F 范围数据表
该命令⽤数据表的数据写⼊指定范围的主存。如果数据个数超过指定的范围,则忽略多出的项;如果数据个数⼩于指定的范围,则重复使⽤这些数据,直到填满指定范围。
4、寄存器命令R
R(Register)命令⽤于显⽰和修改处理器的寄存器,它有三种格式。
R ;格式1,显⽰所有寄存器内容和标志位状态
例如,当我们刚进⼊Debug时,就可以执⾏该命令,显⽰⽰例如下:
其中,前两⾏给出所有寄存器的值,包括各个标志状态。最后⼀⾏给出了当前CS : IP处的指令;由于这是⼀个涉及数据的指令,这⼀⾏的最后还给出相应单元的内容。
R 寄存器名    ;格式2,显⽰和修改指定寄存器
例如,键⼊“r ax”,Debug给出当前AX内容,冒号后⽤于输⼊新数据,如不修改则按Enter键。
RF ;格式3,显⽰和修改标志位
Debug将显⽰当前各个标志位的状态。显⽰的符号及其状态如表F1.1所⽰,⽤户只要输⼊这些符号就可以修改对应的标志状态,键⼊的顺序可以任意。
5、汇编命令A
汇编命令A(Assemble)⽤于将输⼊的汇编指令汇编成为机器代码保存于主存。
A [地址]    ;从指定地址开始汇编指令
A命令中如果没有指定地址,则接着上⼀个A命令的最后⼀个单元开始;若还没有使⽤过A命令,则从当前CS : IP开始。
输⼊A命令后,就可以输⼊8086指令,Debug将它们汇编成机器代码,相继地存放在指定地址开始的存储区中,记住最后要输⼊⼀个回车结束A命令。进⾏汇编的步骤如下:
① 输⼊汇编命令A [地址],按回车。Debug提⽰地址,等待你输⼊新指令;
② 输⼊汇编指令,按回车;
③ 如上继续输⼊汇编指令,直到输⼊所有指令;
④ 不输⼊内容就按回车,结束汇编,返回Debug的提⽰符状态。
A命令⽀持标准的8086(和8087浮点)指令系统以及汇编语⾔语句格式,但要注意以下⼀些规则:
· 所有输⼊的数值都是16进制数;
· 段超越指令需要在相应指令前,单独⼀⾏输⼊;
· 段间(远)返回的助记符要使⽤RETF;
· A命令也⽀持最常⽤的两个伪指令DB和DW。
6、反汇编命令U
反汇编命令U(Unassemble)将主存内容按照机器代码形成汇编指令显⽰:
U [地址]    ;从指定地址开始,反汇编32个字节(80列显⽰模式)
U 范围    ;对指定范围的主存内容进⾏反汇编
U命令中如果没有指定地址,则接着上⼀个U命令的最后⼀个单元开始;若还没有使⽤过U命令,则从当前CS : IP开始。
屏幕显⽰的左边是主存逻辑地址,中间是该指令的机器代码,⽽右边则是对应的指令汇编格式。
7、运⾏命令G
运⾏命令G(Go)从指定地址处开始运⾏程序,直到遇到断点或者程序正常结束。
G [=地址] [断点地址1,断点地址2,...,断点地址10]
G命令等号后的地址指定程序段运⾏的起始地址,如不指定则从当前的CS : IP开始运⾏。断点地址如果只有偏移地址,则默认是代码段CS;断点可以没有,但最多只能有10个。
程序遇到断点(实际上就是断点中断指令INT 3),停⽌执⾏,并显⽰当前所有寄存器和标志位的内容、以及下⼀条将要执⾏的指令(显⽰内容同R命令),以便观察程序运⾏到此的情况。程序正常结束,将显⽰“Program terminated normally”。
注意,G命令以及后⾯的T和P命令要指向正确的指令代码,否则会出现不可预测的结果,例如“死机”。
8、跟踪命令T
跟踪命令T(Trace),也称为单步命令,每执⾏⼀条指令就显⽰运⾏结果,使程序员可以细致地观察程序的执⾏情况。
T [=地址]        ;逐条指令跟踪
T [=地址] [数值]    ;多条指令跟踪
从指定地址起执⾏⼀条或数值参数指定条数的指令后停下来,每条指令执⾏后都要显⽰所有寄存器和标志位的值以及下⼀条指令。如未指定地址则从当前的CS : IP开始执⾏。注意给出的执⾏地址前有⼀个等号,否则会被认为是被跟踪指令的条数(数值)。
T命令逐条指令执⾏程序,遇到⼦程序(CALL)或中断调⽤(INT n)指令也不例外,也会进⼊到⼦程序或中断服务程序当中执⾏。
9、继续命令P
继续命令P(Proceed)类似T命令,逐条执⾏指令、显⽰结果。但是当遇到⼦程序调⽤、中断功能调⽤和循环指令等时,不在⼦程序、中断服务程序或循环体中单步执⾏,⽽是直接执⾏完成⼦程序、中断服务程序或循环体,然后显⽰结果。(T命令步⼊P步过)
当不需要调试⼦程序、中断服务程序或循环程序段时,要应⽤P命令,⽽不是T命令。
P [=地址] [数值]
10、退出命令Q
退出命令Q(Quit)使Debug程序退出,返回DOS。Q命令并⽆存盘功能,可使⽤W命令存盘。
汇编语言大小写字母转换11、命名命令N
命名命令N(Name)把⼀个或两个可以包含路径的⽂件全名存⼊Debug中,以便在其后⽤L或W命令把⽂件装⼊或存盘。
N  ⽂件名1[,⽂件名2]
12、装⼊命令L
装⼊命令L(Load)将磁盘中的⽂件或扇区内容装载到主存中。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。