一 cmd对话框中Debug指令学习
一、DEBUG的主要指令:
点击开始-->点运行-->在运行对话框中输入cmd-->在输入debug
1、显示存储单元的指令D(DUMP)格式为:_D[address]或_D[range]
例如按指定范围显示存储单元内容的方法为:
-d100 120
18E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 G...
18E$:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ..;..h..M PQVW.7
18E4:0120 8B
其中0100至0120是DEBUG显示的单元内容,左边用十六进位表示每个位元群组,右边用ASCII字元表示每个位元群组,.
表示不可显示的字元。这里没有指定段位址,D指令自动显示DS段的内容。如果只指定首位址则显示从首位址开始的80个位元群组的内容。如果完全没有指定位址则显示上一个D指令显示的最后一个单元后的内容。
2、修改存储单元内容的指令有两种。
☆输入指令E(ENTER)有两种格式如下: 天麻炖鱼头
第一种格式可以用给定的内容表来替代指定范围的存储单元内容。指令格式为:
-E address [list]
例如:-E DS:100 F3'XYZ'8D
其中F3,'X','Y','Z'和各占一个位元群组,该指令可以用这五个位元群组来替代存储单元DS:0100到0104的原先的內容。
第二种格式则是采用逐个单元相继修改的方法。指令格式为:
-E address
例如:-E DS:100
则可能显示为:
18E4:0100 89.-
如果需要把该单元的内容修改为78,则使用者可以直接键入78,再按"空格"键可接著显示下一個單元的內容,如下:
18E4:0100 89.78 1B.-
这样使用者可以不断修改相继单元的内容直到用ENTER键结束该指令为止。
☆填写指令F(FILL)其格式为:
-F range list
例如:-F 4BA:0100 5 F3'XYZ'8D
使04BA:0100~0104单元内含特殊的五个位元群组的内容。若果list中的位元群组数超过特殊的范围,则忽略超过的项;若果list的位元群组数小於特殊的范围,则重复使用list填入,直到填满特殊的所有单元為止。
3、检查和修改寄存器内容的指令R(register)它有三种格式如下:
☆显示CPU内所有寄存器内容和标志位状态其格式为:
-R
例如:-r
AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NC
18E4:0100 C70604023801 MOV WORD PTR [0204],0138 DS:0204=0000
☆显示和修改某个寄存器内容其格式为:
-R register name
例如:键入-R AX
系统将响应如下:
AX F1F4
:
即AX寄存器的目前内容为F1F4,如不修改则按ENTER键、否则可键入欲修改的内容,如:
-R bx
BX 0369
:059F
则把BX寄存器的内容修改为059F。
☆显示和修改标志位状态指令格式为:
-RF系统将响应,如:
OV DN EI NG ZR AC PE CY-卡通动物
此时如不修改其内容可按ENTER键,否则可键入欲修改的内容如:
OV DN EI NG ZR AC PE CY-PONZDINV
即可,可见键入的顺序可以是任意的。
4、执行指令G其格式为:
-G[=address1][address2[address3…]]
其中位址1指定了执行的起始位址,如不指定则从目前的CS:IP开始执行。后面的位址均为断点位址,当指令执行到断点时,就停止执行并显示目前所有寄存器及标志位的内容,和下一笔
砌体工程
将要执行的指令。
5、追踪指令T(Trace)有两种格式:
☆逐條指令追蹤:
-T [=address]
从指定位址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。如未指定位址则从目前的CS:IP开始执行。
☆多条指令追踪:
-T [=address][value]
从指定位址起执行n条指令后停下来,n由value指定。
6、汇编指令A(Asmble)其格式为:
-A[address]
该指令容许键入汇编语系语句,并能把它们汇编成机器代码,相继地存放在从指定位址开始的存储区中。必须注意:DEBUG把键入的数字均看成十六进位数,所以如要键入十进位数,则其后应加以说明,如100D
二 cmd对话框中Debug指令学习
7、反汇编指令U(Unasmble)有两种格式。
☆从指定位址开始反汇编32个位元群组其格式为:
-U[address]
例如:
-u100
18E4:0100 C70604023801 MOV WORD PTR[0204],0138
18E4:0106 C70606020002 MOV WORD PTR[0206],0200
18E4:010C C70606020202 MOV WORD PTR[0208],0202
18E4:0112 BBO4O2 MOV BX,0204
18E4:0115 E80200 CALL 011A
18E4:0118 CD20 INT 20
18E4:011A 50 PUSH AX
18E4:011B 51 PUSH CX
18E4:011C 56 PUSH SI
18E4:011D 57 PUSH DI
18E4:011E 8B37 MOV SI,[BX]
若果位址被省略,则从上一个U指令的最后一条指令的下一个单元开始显示32个位元群组。
☆对指定范围内的存储单元进行反汇编,格式为:
-U[range]
例如:
-u100 10c
18E4:0100 C70604023801 MOV WORD PTR[0204],0138
18E4:0106 C70606020002 MOV WORD PTR[0206],0200
18E4:010C C70606020202 MOV WORD PTR[0208],0202
或
丈夫用英语怎么说
-u100 112
18E4:0100 C70604023801 MOV WORD PTR[0204],0138
18E4:0106 C70606020002 MOV WORD PTR[0206],0200
18E4:010C C70606020202 MOV WORD PTR[0208],0202
可见这两种格式是等效的。
蒸馒头怎么做
8、命名指令N(Name)其格式为:
-N filespecs [filespecs]
指令把两个档案标识符格式化在CS:5CH和CS:6CH的两个档案控制块中以便在其后用L或W指令把档案装入存盘。filespecs的格式可以是:
[d:][path] filename[.ext]
例如:
-N myprog
-L
可把档案myprog装入存储器。
9、装入指令(Load)有两种功能。
☆把磁碟上指定扇区范围的内容装入到存储器从指定位址开始的区域中。其格式为:
-L[address[drive ctor ctor]
☆装入指定档案其格式为:
-L[address]
此指令装入已在CS:5CH中格式化了档案控制块所特殊的档案。如未指定位址则装入
CS:0100开始的存储区中。
10、写指令W(Write)有两种功能。
☆把资料写入磁碟的指定扇区。其格式为:
-W address drive ctor ctor
☆把资料写入特殊的档案中。其格式为:
-W[address]
此指令把特殊的存储区中的资料写入由CS:5CH处的档案控制块所特殊的档案中。如未指定位址则资料从CS:0100开始。要写入档案的位元群组数应先放入BX和CX中。
11、离开DEBUG指令Q(Quit)其格式为:
-Q
它离开DEBUG、返回DOS。本指令并无存盘功能,如需存盘应先使用W指令。
==========================================================================
问题:初学者问一个低级问题,执行debug-a后如果有一行输入错误,如何变更这一行?
回答: 加入进行如下输入
D:\PWIN95\Desktop>debug
-a
2129:0100movax,200
2129:0103movbx,200
2129:0106movcx,200
遇见散文2129:0109
此时发现movbx,200一句错误,应为movbx,20可以敲Enter返回"-"状态然后输入:
-a103
2129:0103movbx,20
夹壮如果是多或是少若干行不必重新输入、可以用M指令移动后面的程式来去掉或是增加程式空間。
问题:如何除错和汇编你的第一个PC x86汇编语系程式呢? 母亲的职业
回答:以下这些简单的解释可以让一个汇编语系新手使用DEBUG
00) 在使用时如何快速获得debug的使用帮助呢?
01) 让我们开始工作吧例如:显示BIOS的日期。
02) 在你的电脑的COMMANG档案里搜寻"IBM"这几个字元。
03) 一位十六进位数的运算。
04) 检查x86寄存器内容。
05) 我们来编写我们的第一个用机械语系编写的程式-列印一个字元。
06) 我们现在用汇编语系指令来做和例5一样的事情。
07) 现在,我们不但要编写一个汇写程式式,而且我们还要把它存盘。
08) 现在,我们试一试检视一个已经编好的程式。
09) 你可以用DEBUG的计算功能计算程式的长度。
10) 另一种显示在萤幕上字串的方法。
11) 让我们试一试反覆输出。
12) 我们现在把两个程式连线起来。
13) 让我们逐步执行这个刚刚修补的程式。
14) 如果一开始的指令不是跳转指令那麼可能就要用这种方法了。
以下所有的指令都是可以执行在WIN98/ME/2000/XP/2003的MS-DOS或CMD模式下的。进入MS-DOS或CMD的模式有: