DEBUG使用总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档