dos下输入debug进入调试(不区分大小写)
debug常用功能
R 查看、改变CPU寄存器内容
D 查看内存内容
E 改写内存内容
U 将内存中的机器指令翻译成汇编指令
T 执行一条机器指令
A 以汇编指令的格式在内存中写入一条机器指令
详解
当输入debug之后系统提示符变成 - 我们可在 -后面输入每一个命令参数
r 的使用
如输入 r 后系统输出
-r
AX=0002 BX=4026 CX=0002 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B43 ES=0B43 SS=0B43 CS=1000 IP=0021 NV UP EI PL NZ AC PO CY
1000:0021 0000 ADD [BX+SI],AL DS:4026=04
如果修改其中一个寄存器中的内容 可以用 r 寄存器名
如
-r ax
AX 0002
:
当出现 : 后你可以在:后面输入要修改的内容
d 的使用
d 段地址:偏移地址
如 其中 a000为段地址 0为偏移地址
-d a000:0
A000:0000 FF FF FF 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
A000:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
A000:0020 00 00 7E 81 A5 81 81 A5-99 81 81 7E 00 00 00 00 ..~........~....
A000:0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
A000:0040 00 00 7E FF DB FF FF DB-E7 FF FF 7E 00 00 00 00 ..~........~....
A000:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
A000:0060 00 00 00 00 6C FE FE FE-FE 7C 38 10 00 00 00 00 ....l....|8.....
A000:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
上面信息中 最前面A000为段地址,段地址分号后面的0000 或0010,0020则都是偏移地址,
而 段地址*16+偏移地址则为此内存的真实地址 A000:0000 A000*16+0000代表的真实地址就是A0000
而A000:0010 就是A000*16+0010 的真实地址就是A0010
中间的16位数据代表这个存储间中存储的数据 如A000:0000 后面的FF FF FF 00 00 00 00 00-00 00 00 00 00 00 00 00
则代表了从地址空间A0000到A000F中这16个存储单元的存储的信息
最后的一部分就是这个数据所对应的ASCII码信息 如................ 其中.代表无数据
d 段地址:偏移地址 结束地址
如
-d a000:0 1
A000:0000 FF FF
-d a000:8 f
A000:0000 00 00 00 00 00 00 00 00 ........
e 修改数据
e 段地址:偏移地址 数据信息
-e a000:0 00 00 00
e 段地址:偏移地址 回车
输入信息中间用空格隔开
-e a000:0
A000:0000 00.ab 00.ff 00.00
-u 将机器信息转换成汇编指令信息
u 段地址:偏移地址
-u a000:0
A000:0000 AB STOSW
A000:0001 FF00 INC WORD PTR [BX+SI]
A000:0003 0000 ADD [BX+SI],AL
A000:0005 0000 ADD [BX+SI],AL
A000:0007 0001 ADD [BX+DI],AL
A000:0009 0000 ADD [BX+SI],AL
A000:000B 0000 ADD [BX+SI],AL
A000:000D 0000 ADD [BX+SI],AL
A000:000F 0000 ADD [BX+SI],AL
A000:0011 0000 ADD [BX+SI],AL
A000:0013 0000 ADD [BX+SI],AL
A000:0015 0000 ADD [BX+SI],AL
A000:0017 0000 ADD [BX+SI],AL
A000:0019 0000 ADD [BX+SI],AL
A000:001B 0000 ADD [BX+SI],AL
A000:001D 0000 ADD [BX+SI],AL
A000:001F 0000 ADD [BX+SI],AL
-a以汇编语言的形式写入一条指令
如
-a 1000:0
1000:0000 mov ax,10
1000:0003 mov bx,ax
1000:0005 add ax,bx
1000:0007
-t 执行汇编指令
如
-r
AX=0002 BX=4026 CX=0002 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B43 ES=0B43 SS=0B43 CS=1000 IP=0000 NV UP EI PL NZ AC PO CY
1000:0000 B81000 MOV AX,0010
执行 mov ax,0010之间 ax=0002
-t
AX=0010 BX=4026 CX=0002 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B43 ES=0B43 SS=0B43 CS=1000 IP=0003 NV UP EI PL NZ AC PO CY
1000:0003 89C3 MOV BX,AX
执行后 ax=0010 下一条指令 mov bx,ax
-t
AX=0010 BX=0010 CX=0002 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B43 ES=0B43 SS=0B43 CS=1000 IP=0005 NV UP EI PL NZ AC PO CY
1000:0005 01D8 ADD AX,BX
执行 mov bx,ax后 bx=0010 下一条指令 add ax,bx
-t
AX=0020 BX=0010 CX=0002 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B43 ES=0B43 SS=0B43 CS=1000 IP=0007 NV UP EI PL NZ NA PO NC
1000:0007 0020 ADD [BX+SI],AH DS:0010=A7
执行 add ax,bx后 ax=0020
quit退出debug模式
内存地址空间设置
00000-9FFFF 主存储器地址空间(RAM)
A0000-BFFFF 显存地址空间
C0000-FFFFF 各类ROM地址空间,如主板ROM,显卡ROM