- 帖子
- 300
- 积分
- 762
- 威望
- 1212
- 金钱
- 1030
- 在线时间
- 3 小时
|
DEBUG命令详解
DEBUG命令详解
下面我和大家一起学习一些,Debug的用法
Debug常用命令集
名称 解释 格式
a (Assemble) 逐行汇编 a [address]
c (Compare) 比较两内存块 c range address
d (Dump) 内存16进制显示 d [address]或 d [range]
e (Enter) 修改内存字节 e address
f (fin) 预置一段内存 f range list
g (Go) 执行程序 g [=address][address...]
h (Hexavithmetic) 制算术运算 h value value
i (Input) 从指定端口地址输入 i pataddress
l (Load) 读盘 l [address [driver seetor>
m (Move) 内存块传送 m range address
n (Name) 置文件名 n filespec [filespec...]
o (Output) 从指定端口地址输出 o portadress byte
q (Quit) 结束 q
r (Register) 显示和修改寄存器 r [register name]
s (Search) 查找字节串 s range list
t (Trace) 跟踪执行 t [=address] [value]
u (Unassemble) 反汇编 u [address ]或range
w (Write) 存盘 w [address[driver sector secnum>
? 联机帮助 ?
debug小汇编a命令
debug小汇编a命令是一个很有用的功能,许多的小程序都要他来做。
编一些小程序比汇编要来得方便,快洁。
在Debug中,中断是非常有用的,首先,让我们先了解一下中断。
所谓中断,其实,就是,当你做某事时,有人过来找你有其他事,你先放下手中的事(计算机中,称为保护现场)
,再去与叫你的那个人办事去,等完了,你又回,接着做刚才的事。这是个很通俗的讲法。
计算机在运行时,也会出现这种情况,我们叫之中断。
下面是他的一些常用中断向量的入口值详解:(记住哦,很用的...呵呵)
IBM PC 中断 int10
ooH 屏幕方式设置
入口:AH=0,AL=显示方式代码(0--6)
0:40*25 黑白
1:40*25 彩色
2:80*25 黑白
3:80*25 彩色文本
4:320*200 彩色
5:320*200 黑白
6:640*200 黑白图形模式
7:80*25 单色字符(单色显示器)
0BH 色彩设置
入口:AH=0B,BL=0 设背景色,BH=0--15 BL=1 设调色码,BH=0--1
0CH 写图形点
入口:AH=0C,CX:DX=列号:行号,AL=颜色
ODH 读图形点
入口:AH=0D,CX:DX=列号:行号
返回:AL=颜色
0EH 在当前页、当前光标处写字符
入口:AH=0E,AL=字符的ASCII码,BL=前景色
OFH 显示器状态
入口:AH=0F
返回:AL=当前显示器方式,AH=屏幕列数,BH=当前页号
01H 光标设置
入口:AH=1,CH=光标起始行号(00--0C),CL=光标结束行号(00--0C)
注:CH > CL
02H 光标定位
入口:AH=2,BH=页号,DH:DL=起始行:列
03H 读光标位置
入口:AH=3,BH=页号。
返回:DH:DL=起始行:列
06H 窗口上卷
入品:AH=6,AL=窗口上卷行数,CH:CL-DH:DL 窗口坐标
注:AL=0 卷动整个窗口
07H 窗口下卷
入口:AH=7,AL=窗口下卷行数,CH:CL-DH:DL 窗口坐标
08H 读当前光标处字符和属性
入口:AH=8,BH=页号。
返回:AH:AL=字符的颜色:字符的ASCII码
注:颜色代码见下对照表
09H:在当前光标处写字符和属性
注:光标不下移
入口:AH=9,BH=页号,BL:AL=字符的颜色:字符的ASCII码,CX=重复次数
1 2 3 4 5 6 7 8
BL R G B I R G B
闪烁 字符底色 加亮 字符颜色
中断向量号表
中断号 解释 中断号 解释
0 除数为0错 19 引导装入程序
1 音步中断 1A 日时调用
2 不可屏蔽中断NMI 1B 键盘阻断时得到控制权
3 断电中断(CCH) 1C 时钟中断时得到控制权
4 溢出中断 1D 指向CRT初始参数表
5 屏幕打印中断 1E 指向盒带参数表
6-7 保留 1F 1KB图形模式
8 计时器中断(18.2秒) 20 结束DOS程序
9 键盘中断 21 DOS功能调用
A-D 保留 22 结束地址(建义用EXEC)
E 软盘机中断 23 DOS Crtl-Break退出地址
F 保留 24 DOS致命错向量
10 屏幕I/O调用 25 DOS绝对磁盘读
11 设备检查调用 26 DOS绝对磁盘写
12 存储器检查调用 27 结束程序并驻留(建义用31h)
13 软盘机I/O调用 28-3F DOS保留
14 RS-233I/O调用 40-7F 未用
15 盒带机I/O调用 80-85 BASIC保留
16 键盘I/O调用 86-F0 BASIC解释程序用
17 打印机I/O调用 F1-FF 未用
18 ROM-BASIC入口
段内直接调用
段内间接调用(寄存器)
段内间接调用(存储器)
段间直接调用
段间间接调用
指令名
jmp 指令(无条件转移指令)(控制指令-长转移)
详解:
段内直接跳转
短段内直接跳转
段内间接跳转(寄存器)
段内间接跳转(存储器)
段间直接跳转
段间间接跳转
指令名
ret 指令(过程返回)(控制指令-长转移)
详解:
段内返回
段内返回立即数加于sp
段间返回
段间返回立即数加于sp
na/jnbe 指令(控制指令-短转移) 不小于或不等于时转移
jae/jnb 指令 (控制指令-短转移) 大于或等于时转移
jb/jnae 指令 (控制指令-短转移) 小于转移
jbe/jna 指令 (控制指令-短转移) 小于或等 于转移
jg/jnle 指令(控制指令-短转移) 大于转移
jge/jnl 指令 (控制指令-短转移) 大于或等于转移
jl/jnge 指令 (控制指令-短转移) 小于转移
jle/jng 指令 (控制指令-短转移) 小于或等 于转移
je/jz 指令 (控制指令-短转移) 等于转移
jne/jnz 指令 (控制指令-短转移) 不等于转移
jc 指令 (控制指令-短转移) 有进位时转移
jnc 指令 (控制指令-短转移) 列进位时转移
jno 指令 (控制指令-短转移) 不溢出时转移
jnp/jpo 指令 (控制指令-短转移) 奇偶性为奇数时转移
jns 指令 (控制指令-短转移) 符号位为"0"转移
jo 指令 (控制指令-短转移) 溢出转移
jp/jpe 指令 (控制指令-短转移) 奇偶性为偶数时转移
js 指令 (控制指令-短转移) 符号位为"1"时转移
loop 指令 (循环控制指令-短转移) cx 不为0时循环
loope/loopz 指令 (循环控制指令-短转移) cx 不为0且标志 z=1 时循环
loopne/loopnz 指令 (循环控制指令-短转移) cx 不为0且标志 z=0 时循环
jcxz 指令 (循环控制指令-短转移) cx 为0时转移
★int 指令 (中断指令) 中断指令(后详解)
into 指令 (中断指令) 溢出中断
iret 指令 (中断指令) 中断返回
指令名
shl 指令(逻辑左移)
sal 指令(算术左移)
shr 指令(逻辑右移)
sar 指令(算术右移) 寄存器,1
rol 指令(循环左移) 寄存器,cl
ror 指令(循环右移) 存储器,1
rcl 指令(通过进位的循环左移)存储器,cl
rcr 指令(通过进位的循环右移)(逻辑运算)
not 指令(取反运算)寄存器求反
(逻辑运算)存储器求反
and 指令(与运算) (逻辑运算)
寄存器 and 寄存器 寄存器
寄存器 and 存储器 寄存器
存储器 and 寄存器 存储器
立即数 and 存储器 存储器
立即数 and 累加器 累加器
or 指令(或运算)(逻辑运算)
寄存器 or 寄存器 寄存器
寄存器 or 存储器 寄存器
存储器 or 寄存器 存储器
立即数 or 存储器 存储器
立即数 or 累加器 累加器
test 指令(测试) (逻辑运算)
寄存器 test 寄存器
寄存器 test 存储器
寄存器 test 立即数
存储器 test 立即数
累加器 test 立即数
movs 指令(串传送)(字符串操作指令)
单个传送
重复传送
cmps 指令(串比较) (字符串操作指令)
单个比较
重复比较
scas 指令(串扫描)(字符串操作指令)
单个
重复
lods 指令(装入串)
(字符串操作指令)
单个装载
重复装载
stos 指令(保存串) (字符串操作指令)
单个存储
重复存储
mov 指令(传送字或字节)(数据传送命令)
寄存器与寄存器间传送
存储器与寄存器间传送
立即数传送给存储器
立即数传送给寄存器
存储器传送给累加器
累加器传送存储器
寄存器传送给段寄存器
存储器传送给段寄存器
段寄存器传送给寄存器
段寄存器传送给存储存器
pop 指令(把字弹出堆栈) (数据传送命令)
push 指令(把字压入堆栈)
存储器
寄存器
段寄器
xchg 指令(交换字或字节) (数据传送命令)
寄存器与寄存器交换
存储器与寄存器交换
寄存器与累加器交换
in 指令(端口输入) (数据传送命令)
直接输入
间接输入
out 指令(端口输出) (数据传送指令)
直接输出
间接输出
add 指令(加法)(算术指令)
adc 指令(带进位加法)
寄存器+寄存器 寄存器
寄存器+存储器 寄存器
存储器+寄存器 存储器
立即数+存储器 存储器
立即数+累加器 累加器
inc 指令(加1)(算术指令)
存储器增量
寄存器增量
sub 指令(减法) (算术指令)
sbb 指令(带借位减法)
寄存器-寄存器 寄存器
寄存器-存储器 寄存器
存储器-寄存器 存储器
立即数-存储器 存储器
立即数-累加器 累加器
dec 指令(减1)(算术指令)
存储器减量
寄存器减量
nec 指令(求反,以0减之)
寄存器求补
存储器求补
cmp 指令(比较)(算术指令)
寄存器与寄存器比较
寄存器与存储器比较
寄存器与立即数比较
存储器与立即数比较
累加器与立即数比较
mul 指令(无符号乘法) (算术指令)
imul 指令(整数乘法)
与8位寄存器相乘
与16位寄存器相乘
与8位存储单元相乘
与16位存储单元相乘
div 指令(无符号除法)(算术指令)
idiv 指令(整数除法)
被8位寄存器除
被16位寄存器除
被8位存储单元除
被16位存储单元除
Debug实战
1.查看主板的生产日期,版本
D ffff:05
D fe00:0e
2.模拟Rest键功能
A
:100 jmp ffff:0000
:105
g
3.快速格式化软盘
L 100 0 0 * '插入一张己格式化软盘
W 100 0 0 * '放入一张欲格式化软盘
注:* 分别为:720K e |1.2M id |1.44M 21
4.硬盘格式化两种方法
(1)G=c800:05
(2) A 100
mov ax,0703
mov cx,0001
mov dx,0080
int 13
int 3
g 100
5.加速键盘
A
mov ax,0305
mov bx,0000
int 16
int 20
rcx
10
n fast.com
w
q
6.关闭显示器(恢复时,按任意键)
A
mov ax,1201
mov bl,36
int 10
mov ah,0
int 16
mov ax,1200
int 10
rcx
10
n crt-of.com
w
q
7.硬盘DOS引导记录的修复
在软驱中放入一张己格式化软盘
debug
-l 100 2 0 1
-w 100 0 50 1
把软盘放入故障机软驱中
debug
-l 100 0 50 1
-w 100 2 0 1
-q
8.清coms中setup口令
debug
-a
mov bx,0038
mov cx,0000
mov ax,bx
out 70,al
inc cx
cmp cx,0006
jnz 0106
int 20
-rcx
:20
-nclearpassword.com
-w
-q
注:以上适合super与dtk机,对于ast机,因为他的口令放在coms的4ch-51h地址处,只要将:mov bx,0038 改为: mov
bx,004c即可
9.取消coms的密码(将coms数据清为初始化)
-o 70,10
-o 71,10
-g
-q
10.将硬盘主引导记录保存到文件中
debug
-a
mov ax,0201
mov bx,0200
mov cx,0001
mov dx,0080
mov int 13
int 3
-rcx
:200
-nboot.dat
-w
-q
11.调用中断实现重启计算机(可以成文件)
debug
-a
int 19
int 20
-rcx
:2
-nreset.com
-w
-q |
|