Board logo

标题: 谁有学习debug命令和汇编的资料,提供一下,不胜感激 [打印本页]

作者: 郭瑞     时间: 2004-6-21 00:00    标题: 谁有学习debug命令和汇编的资料,提供一下,不胜感激

为了补充自己的知识,更好的为现代化建设服务,请帮帮兄弟,谢谢了
作者: xjhlhb     时间: 2004-6-25 00:00
我可以提供一些,但不知如何在论坛中上传呀?!
作者: zgywqm     时间: 2004-6-29 00:00
觉悟很高啊!
作者: bbbc123     时间: 2004-6-30 00:00
C:\>debug
-d 0000
135E:0000  CD 20 FF 9F 00 9A EE FE-1D F0 4F 03 C2 0D 8A 03   . ........O.....
135E:0010  C2 0D 17 03 C2 0D 15 04-01 01 01 00 02 FF FF FF   ................
135E:0020  FF FF FF FF FF FF FF FF-FF FF FF FF 7D 0D 4E 01   ............}.N.
135E:0030  82 12 14 00 18 00 5E 13-FF FF FF FF 00 00 00 00   ......^.........
135E:0040  05 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
135E:0050  CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 20   .!...........
135E:0060  20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 20           .....
135E:0070  20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00           ........


高手们能否为我解释上面的这些十六进制数是什么意思?如何查看硬盘的主引导区?
我的e-mail:qfdymyx@163.com
msn:qfdymyx@hotmail.com
作者: autoit     时间: 2004-6-30 00:00
debug命令详解
http://cn-dos.net/dosbbs/dispbbs.asp?boardID=6&replyID=125&ID=48&skin=1
作者: 郭瑞     时间: 2004-7-2 00:00
谢了各位!
作者: TurboY     时间: 2004-7-7 00:00
汇编的学习资料建议搜索一下“HELPPC”看看,这是个好的帮助系统,里面有汇编、C、BIOS功能调用、DOS功能调用等详细资料。
作者: bush     时间: 2004-7-9 00:00
我是第一次听说HELPPC,试一下
作者: 凌霄子     时间: 2004-7-14 00:00
DEBUG命令详解

    DEBUG是DOS中的一个外部命令,从DOS
1.0起就带有此命令,因此可见此命令的重要性了。虽然此命令的功能非常强大,可以解决许多问题,可是对许多人来说,尤其是初学者来说,却非常不易掌握。因此,现将DEBUG的命令详细介绍一番,以让大家知道它的使用。

Debug:A(汇编)


直接将 8086/8087/8088 记忆码合并到内存。

该命令从汇编语言语句创建可执行的机器码。所有数值都是十六进制格式,必须按一到四个字符输入这些数值。在引用的操作代码(操作码)前指定前缀记忆码。


a [address]


参数

address

指定键入汇编语言指令的位置。对 address
使用十六进制值,并键入不以“h”字符结尾的每个值。如果不指定地址,a 将在它上次停止处开始汇编。

有关将数据输入到指定字节中的信息,请单击“相关主题”列表中的 Debug
E(键入)。

有关反汇编字节的信息,请单击“相关主题”列表中的 Debug U(反汇编)。


说明

使用记忆码

段的替代记忆码为 cs:、ds:、es: 和 ss:。远程返回的记忆码是
retf。字符串处理的记忆码必须明确声明字符串大小。例如,使用 movsw 可以移动 16
位的字串,使用 movsb 可以移动 8 位字节串。


汇编跳转和调用

汇编程序根据字节替换自动将短、近和远的跳转及调用汇编到目标地址。通过使用
near 或 far 前缀可以替代这样的跳转或调用,如下例所示:

-a0100:0500
0100:0500 jmp 502 ; a 2-byte short jump
0100:0502 jmp near 505 ; a 3-byte near jump
0100:0505 jmp far 50a ; a 5-byte far jump

可以将 near 前缀缩写为 ne。


区分字和字节内存位置

当某个操作数可以引用某个字内存位置或者字节内存位置时,必须用前缀 word
ptr 或者前缀 byte ptr 指定数据类型。可接受的缩写分别是 wo 和
by。以下范例显示两种格式:

dec wo [si]
neg byte ptr [128]


指定操作数

Debug 使用包括在中括号 ([ ])
的操作数引用内存地址的习惯用法。这是因为另一方面 Debug
不能区分立即操作数和内存地址的操作数。以下范例显示两种格式:

mov ax,21 ; load AX with 21h
mov ax,[21] ; load AX with the
; contents of
; memory location 21h


使用伪指令

使用 a 命令提供两个常用的伪指令:db 操作码,将字节值直接汇编到内存,dw
操作码,将字值直接汇编到内存。以下是两个伪指令的范例:

db 1,2,3,4,"THIS IS AN EXAMPLE"
db 'THIS IS A QUOTATION MARK:"'
db "THIS IS A QUOTATION MARK:'"
dw 1000,2000,3000,"BACH"


范例

a 命令支持所有形式的间接注册命令,如下例所示:

add bx,34[bp+2].[si-1]
pop [bp+di]
push [si] )

还支持所有操作码同义词,如下例所示:

loopz 100
loope 100
ja 200
jnbe 200

对于 8087 操作码,必须指定 wait 或 fwait 前缀,如下例所示:

fwait fadd st,st(3) ; this line assembles
; an fwait prefix


Debug:C(比较)


比较内存的两个部分。


c range address


参数

range

指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。有关有效的
range 值的信息,请单击“相关主题”列表中的“Debug 说明”。

address

指定要比较的第二个内存区域的起始地址。有关有效 address
值的信息,请单击“相关主题”列表中的“Debug 说明”。


说明

如果 range 和 address 内存区域相同,Debug 将不显示任何内容而直接返回到
Debug 提示符。如果有差异,Debug 将按如下格式显示:
address1 byte1 byte2 addess2

范例

以下命令具有相同效果:

c100,10f 300
c100l10 300

每个命令都对 100h 到 10Fh 的内存数据块与 300h 到 30Fh
的内存数据块进行比较。

Debug 响应前面的命令并显示如下信息(假定 DS = 197F):

197F:0100 4D E4 197F:0300
197F:0101 67 99 197F:0301
197F:0102 A3 27 197F:0302
197F:0103 35 F3 197F:0303
197F:0104 97 BD 197F:0304
197F:0105 04 35 197F:0305
197F:0107 76 71 197F:0307
197F:0108 E6 11 197F:0308
197F:0109 19 2C 197F:0309
197F:010A 80 0A 197F:030A
197F:010B 36 7F 197F:030B
197F:010C BE 22 197F:030C
197F:010D 83 93 197F:030D
197F:010E 49 77 197F:030E
197F:010F 4F 8A 197F:030F

注意列表中缺少地址 197F:0106 和
197F:0306。这表明那些地址中的值是相同的。


Debug(转储)


显示一定范围内存地址的内容。


d [range]


参数

range

指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。有关有效的
range 值的信息,请单击“相关主题”列表中的“Debug 说明”。如果不指定
range,Debug 程序将从以前 d 命令中所指定的地址范围的末尾开始显示 128
个字节的内容。

有关显示寄存器内容的信息,请单击“相关主题”列表中的 Debug
R(寄存器)。


说明
当使用 d 命令时,Debug
以两个部分显示内存内容:十六进制部分(每个字节的值都用十六进制格式表示)和 ASCII 码部分(每个字节的值都用 ASCII
码字符表示)。每个非打印字符在显示的 ASCII 部分由句号 (.) 表示。每个显示行显示
16 字节的内容,第 8 字节和第 9 字节之间有一个连字符。每个显示行从 16
字节的边界上开始。

范例
假定键入以下命令:
dcs:100 10f
Debug 按以下格式显示范围中的内容:
04BA:0100 54 4F 4D 00 53 41 57 59-45 52 00 00 00 00 00 00
TOM.SAWYER......
如果在没有参数的情况下键入 d 命令,Debug
按以前范例中所描述的内容来编排显示格式。显示的每行以比前一行的地址大 16 个字节(如果是显示 40
列的屏幕,则为 8 个字节)的地址开头。
对于后面键入的每个不带参数的 d 命令,Debug
将紧接在最后显示的命令后立即显示字节内容。
如果键入以下命令,Debug 将从 CS:100 开始显示 20h 个字节的内容:
dcs:100 l 20
如果键入以下命令,Debug 将显示范围从 CS 段的 100h 到 115h
中所有字节的内容:
dcs:100 115

Debug:E(键入)

将数据输入到内存中指定的地址。
可以按十六进制或 ASCII
格式键入数据。以前存储在指定位置的任何数据全部丢失。

e address