DEBUG使用总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、DEBUG的主要命令
A命令
功能: 将助记符指令转换为机器指令码存储在指定的内存单元,即汇编过程
格式1: A
xxxx:0100 助记符指令1(ENTER)
xxxx:xxxx 助记符指令2(ENTER)
……
xxxx:xxxx ENTER结束
功能: 逐次将助记符指令对应的指令码存入从CS: 0100h起的连续的内存单元
格式2:A 起始地址start-addr
xxxx:0100 助记符指令1(ENTER)
xxxx:xxxx 助记符指令2(ENTER)
……
xxxx:xxxx ENTER结束
功能: 逐次将助记符指令对应的指令码存入从CS: star-addr起的连续的内存单元
注: 指令中可以包含数据定义伪指令DB/DW等语句
D命令
功能: 查看指定内存单元的内容
格式1: D [起始地址start-addr [L长度length]]
功能: 显示从起始地址start-addr开始的length个字节,省略start-addr时从DS:0100h开始,省略长度length时默认值为80H(128)
注: start-addr可以为偏移地址, 此时其默认的段基址为DS;
也可以显式地按段地址:偏移地址格式指明完整的逻辑地址, 段地址不一定是段寄存器, 还可以是任意16位地址
格式2: D[起始地址start-addr 终结地址end-addr]
功能: 显示从起始地址start-addr开始到结束地址end-addr之间的字节
注: start-addr和end-addr同时为偏移地址时默认的段基址为DS;
start-addr采用段地址:偏移地址格式指明时, end-addr可以不必再指明段地址, 直接以偏移地址形式给出(start-addr和end-addr的段地址始终相同);
当start-addr和end-addr的偏移地址相同时只显示该存储单元的字节.
E命令
功能: 修改指定内存单元的内容
格式1: E 起始地址start-addr 字节数据1 字节数据2 … 字节数据n
功能: 逐次用后面的字节数据修改从起始地址起的连续内存单元的内容
格式2: E 起始地址start-addr(按ENTER)
起始地址该内存单元的原值.待输入新值/空格键
功能:在提示情况下逐个修改从起始地址start-addr开始的字节数据的值, 输入空格表示不做修改, 直至输入ENTER键结束
G命令
功能: 执行正在调试的汇编程序至指定的断点
格式: G [start-addr] break-addr1[, break-addr2, …]
功能:star-addr是指令码的起始偏移地址, break-addr是断点处的偏移地址, 段地址均为CS, 可以指定多个断点位置
P命令
功能: 执行INT, CALL, LOOP及重复串指令(REP等)直至下一条指令
格式: P [start-addr] [n]
功能:star-addr是待执行指令码的起始偏移地址, n是往下执行指令的条数
Q命令
功能: 退出debug
格式: Q
R命令
功能:显示和修改寄存器的内容
格式1:R;显示所有寄存器的内容
格式2: R 寄存器名;显示指定寄存器的值, 再按ENTER后键入数值可修改该寄存器的值格式3:R F;显示标志寄存器中各标志位的值
标志位符号的意义如下:
标志位符号意义标志位1标志位0
OF 溢出(是/否) OV NV
DF 方向(减/增) DN UP
IF 中断(允许/关闭)EI DI
SF 符号(负/正) NG PL
ZF 零(是/否) ZR NZ
AF 辅助进位(是/否)AC NA
PF 奇偶(偶/奇) PE PO
CF 进位(是/否) CY NC
T命令
功能: 以单步方式执行指定的指令代码
格式1: T
功能: 以单步方式执行从CS:IP开始的1条指令
格式2: T 指令条数n
功能: 以单步方式执行从CS:IP开始开始的n条指令
U命令
功能: 将内存单元的机器指令码转换为助记符指令,即反汇编过程
格式1: U 起始地址start-addr
功能: 将从start-addr开始的32个字节的指令码转换为助记符
格式2: U 起始地址start-addr终结地址end-addr
功能: 将从start-addr开始至终结地址end-addr之间的指令码转换为助记符
二、DEBUG的相关说明
1.debug默认所有的数值都是16进制的,且无需在最后添加后缀h;
2.debug不区分字母的大小写;
3.快捷键: F1键--逐个重复前一条命令的字符,F3键--重复前面整条命令;
4.在dos系统中文件名的最大长度为8个字符,扩展名的最大长度为3个字符.在给asm文件命名时若超过8个字符,虽然可以编译生成obj文件但在连接时却生成不了exe文件,从而引发一些错误.注意文件名不要超过8个字符;
5.对于32位指令,debug并不显示其助记符,而是会以DB开头显示,这与数据定义伪指令不同;
6.在[EA](EA为常数)作操作数时(如MOV 寄存器,[EA]和MOV [EA],寄存器),若不在[EA]前加段前缀, 则debug会将其视为常数EA而非偏移地址,此时必须显式指明段前缀.
三、用DEBUG调试程序
1.顺序指令的调试
调试程序的指令格式路径>debug filename.exe
接着可用R指令查看各寄存器的值, 说明如下:
1)CX的值为整个程序的指令码的字节总数;
2)CS:IP指向第一条指令, (CS)=(DS)+10h, (IP)=0000h, 这是因为程序在内存中的起始地址是DS:0000h,但前256个字节单元用于PSP,所以从(CS+10h): 0000h才是程序的指令码.
用U命令可以查看程序的助记符指令
下面以程序test.asm为例说明, 其源代码如下:
.model small
.data
buff db 2 dup(?)
.code
start:
mov ax,@data
mov ds,ax
mov ax,100
mov bl,3
div bl
mov buff,al
mov buff+1,ah
mov ah,4ch
int 21h
end start