名称 解释 格式 a (Assemble) 逐行汇编 a [address] c (Compare) 比较两内存块 c range address d (Dump) 内存16进制显示 d [address]或 d [range] e (Enter) 修改内存字节 e address [list] 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 屏幕方式设置
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
0)在使用时,如何快速获得debug的使用帮助呢 以下PROMPT>表示目录提示符:一般为:C:\WINDOWS\COMMAND\ PROMPT> DEBUG /?<按回车press the enter key now> 怎样?出错了吧。显示如下 C:\WINDOWS>DEBUG/? Runs Debug, a program testing and editing tool.
[drive:][path]filename Specifies the file you want to test. testfile-parameters Specifies command-line information required by the file you want to test.
After Debug starts, type ? to display a list of debugging commands. 因为错了所以它给你显示一些提示。留意到最后一句了吗?
现在我们再来试一试: PROMPT> DEBUG<按回车> (注意, DEBUG程序的命令是在一条横线"-"后出现的。) -?<在出现的横线后面输入?再回车> (下面的内容是按字母顺序排列的) (注意:Note: Don't type the dash or comments -- just the ?) 显示如下,但是没有中文的哦,中文是我加上去的。
汇编assemble A [address] 比较compare C range address 倾倒dump D [range] 进入enter E address [list] 填充fill F range list 进行go G [=address] [addresses] 十六进制hex H value1 value2 输入input I port 装载load L [address] [drive] [firstsector] [number] 移动move M range address 命名name N [pathname] [arglist] 输出output O port byte 进行proceed P [=address] [number] 离开quit Q 纪录register R [register] 搜寻search S range list 描述trace T [=address] [value] 反汇编unassemble U [range] 写write W [address] [drive] [firstsector] [number] 分配扩展内存allocate expanded memory XA [#pages] 释放扩展内存deallocate expanded memory XD [handle] map expanded memory pages XM [Lpage] [Ppage] [handle] display expanded memory status XS -q<按回车> (这是退出DEBUG回到DOS状态)This quits out of debug, returning to the DOS prompt)
Tested examples below walk the user thru the following debug examples: 在下面的例子里读者必须明白以下几条DEBUG命令。 -D 显示一定范围内存的内容Display the contents of an area of memory -Q 退出DEBUG程序Quit the debug program -S 搜寻Search for whatever -H 十六进制的运算Hex arithmatic -R 显示或者改变一个或者多个寄存器的内容Display or change the contents of one or more registers -E 输入数据进入内存,在一个详细的地址里Enter data into memory, beginning at a specific location -G 运行现在在内存里的程序。Go run the executable program in memory -U 反汇编,把我们不认识的机械代码变为我们可以认识汇编语言符号Unassemble machine code into symbolic code -T 描述一条指令的用法。Trace the contents of one instruction -P 进行或者执行一个相关的指令Proceed, or execute a set of related instructions -A 编译,把汇编命令变为机械代码Assemble symbolic instructions into machine code -N 命名一个程序Name a program -W 把一个已经命名的程序写进磁盘Write the named program onto disk -L 把程序装载进内存Load the named program back into memory
C:\WINDOWS>debug -R AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=127C ES=127C SS=127C CS=127C IP=0100 NV UP EI PL NZ NA PO NC 127C:0100 043C ADD AL,3C -Q
下面是对寄存器的简单介绍:
数据存储器 在本类中,一般讲的AH就是AX的前八位,AL就是AX的后八位,后面的以此类推。 AX Accumulator;作为累加器,所以它是算术运算的主要寄存器。另外所有的I/O指令都使用这一寄存器与外部设备传送信息。 BX Base register;可以作为通用寄存器使用,此外在计算存储器地址时,它经常用作基地址寄存器。 CX Counting register;可以作为通用寄存器使用,此外在循环(LOOP)和串处理指令中作隐含的计数器。 DX Data register;可以作为通用寄存器使用,一般在作双字长运算时,把DX和AX组合在一起存放一个双字长数,DX用来存放高位字。此外,对某些I/O操作,DX可用来存放I/O的端口地址。
指针及变址寄存器 BP Base pointers register ;机制指针寄存器 SI Source index register ;堆栈指针寄存器 DI Destiny index register ;目的变址寄存器 SP Battery pointer register ;堆栈指针寄存器
段寄存器 CS Code segment register ;代码段寄存器,存放正在运行的程序指令 DS Data segment register ;数据段寄存器,存放当前运行程序所用的数据 SS Battery segment register ;堆栈段寄存器,定义了堆栈所在区域 ES Extra segment register ;附加段寄存器,存放附加的数据,是一个辅助性的数据区,
控制寄存器 IP Next instruction pointer register;指令指针寄存器,它用来存放代码段中的偏移地址,在程序运行的过程中,它始终指向下一条指令的首地址,它与CS寄存器联用确定下一条指令的物理地址 F Flag register;标志寄存器 "NV UP EI PL NZ NA PO NC"就是了,也有人称之为PSW Program Status Wold程序状态寄存器
AX=0200 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=127C ES=127C SS=127C CS=127C IP=0102 NV UP EI PL NZ NA PO NC 127C:0102 B241 MOV DL,41 -T
AX=0200 BX=0000 CX=0000 DX=0041 SP=FFEE BP=0000 SI=0000 DI=0000 DS=127C ES=127C SS=127C CS=127C IP=0104 NV UP EI PL NZ NA PO NC 127C:0104 CD21 INT 21 -P A AX=0241 BX=0000 CX=0000 DX=0041 SP=FFEE BP=0000 SI=0000 DI=0000 DS=127C ES=127C SS=127C CS=127C IP=0106 NV UP EI PL NZ NA PO NC 127C:0106 CD20 INT 20 -P
Program terminated normally -Q
C:\WINDOWS>
返回目录
6) 我们现在用汇编语言指令来做和例5一样的事情
PROMPT> DEBUG<按回车> -A 100<按回车> (在偏移地址为100的地方输入汇编语言程序) MOV AH,02<按回车> (选用DOS的02号功能调用,显示输出) MOV DL,<按回车> (在DX寄存器的后八位存入41h,41h就是大写A的ASCII码,身边有ASCII表的朋友可以对着表改改数字试一试) INT 21<按回车> (当AH=02时这是DOS显示输出的中断号,显示"A") INT 20<按回车> (退出DOS) <按回车> (结束汇编语言编程状态,回到DEBUG命令状态) -G =100<按回车> (运行程序,其实可以不要"=100"因为一般默认启始位置是100) -Q<按回车> (退出DEBUG)
C:\WINDOWS>DEBUG -A 100 127C:0100 MOV AH,02 127C:0102 MOV DL,41 127C:0104 INT 21 127C:0106 INT 20 127C:0108 -G A Program terminated normally -Q