Ⅰ 请问在DOS环境下编译程序时,即执行debug命令的程序编译时,输入错误了,应该如何撤销不再提示error
DEBUG是常用的汇编语言级调试工具,为汇编语言程序员提供了分析指令、跟踪程序的有效手段
如何进入Debug程序?
答:在命令提示符下输入“debug”回车即可
懂得汇编的朋友,相信看懂下面命令是没多大问题的。
常用命令:
-A 汇编 格式:A 起始地址
例如:输入“A”,回车,然后输入“MOV AX,10”回车。再按一次回车,则退出汇编状态。
-U 反汇编 格式:U 起始地址 结束地址
例如:接上面,输入“U”,回车,即可看到结果。
以下不再举例,类似上面,有待自己研究,这样记得更牢。谢谢!
-T 单步执行 格式:T 起始地址 运行指令数
-G 断点执行 格式:G 起始地址 断点地址 结束地址
-D 数据显示 格式: D 起始地址 结束地址
-R 显示修改寄存器
格式:R 寄存器名
-P 单步执行,不进入中断
格式:T 起始地址 运行指令数
-F 连续填入内存内容
格式:起始地址 结束地址 要填入的数值系列
-E 单个修改内存内容
格式: E 地址 填入内容
-Q 退出debug状态
格式: Q 回车
不常用命令:
-M 内存搬家指令:
格式:M 起始地址 结束地址 目的地址
-H 16进制加法:
格式:H 操作数1 操作数2
结果显示:加法结果 减法结果
Ⅱ 汇编语言中,p命令和t命令有什么区别
在汇编语言程序调试的DEBUG环境中,有三个执行指令的命令:
.
T命令:单步执行,每次只执行一条代码语句,遇到子程序后进入子程序逐条执行指令;
.
P命令:类似T命令,若有子程序,直接执行完子程序全部指令而不是逐条执行指令,在遇到循环指令时,会直接执行至CX递减至0;
.
G命令:多步执行,可以跟地址和断点,即格式为 G[=address] [breakpoints],运行到[breakpoints]指定位置的指令后暂停,若不加参数则从当前IP运行到程序结束。
Ⅲ debug命令有什么作用如何使用
DEBUG是为汇编语言设计的一种高度工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。x0dx0a一、DEBUG程序的调用x0dx0a 在DOS的提示符下,可键入命令:x0dx0a C:\DEBUG [D:][PATH][FILENAME[.EXT]][PARM1][PARM2]x0dx0a 其中,文件名是被调试文件的名字。如用户键入文件,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。命令中的D指定驱动器PATH为路径,PARM1和PARM2则为运行被调试文件时所需要的命令参数。x0dx0a 在DEBUG程序调入后,将出现提示符,此时就可用DEBUG命令来调试程序。x0dx0a二、DEBUG的主要命令x0dx0a 1、显示存储单元的命令D(DUMP),格式为:x0dx0a _D[address]或_D[range]x0dx0a 例如,按指定范围显示存储单元内容的方法为:x0dx0a -d100 120x0dx0a18E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G...8.G.....G...x0dx0a18E$:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ..;..h..M PQVW.x0dx0a 7x0dx0a18E4:0120 8Bx0dx0a 其中0100至0120是DEBUG显示的单元内容,左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,·表示不可显示的字符。这里没有指定段地址,D命令自动显示DS段的内容。如果只指定首地址,则显示从首地址开始的80个字节的内容。如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。x0dx0a2、修改存储单元内容的命令有两种。x0dx0a ·输入命令E(ENTER),有两种格式如下:第一种格式可以用给定的内容表来替代指定范围的存储单元内容。命令格式为:x0dx0a -E address[list]x0dx0a例如,-E DS:100 F3'XYZƎDx0dx0a 其中F3,'X','Y','Z'和各占一个字节,该命令可以用这五个字节来替代存储单元DS:0100到0104的原先的内容。x0dx0a 第二种格式则是采用逐个单元相继修改的方法。命令格式为:x0dx0a -E addressx0dx0a例如,-E DS:100x0dx0a 则可能显示为:x0dx0a 18E4:0100 89.-x0dx0a 如果需要把该单元的内容修改为78,则用户可以直接键入78,再按“空格”键可接着显示下一个单元的内容,如下:x0dx0a 18E4:0100 89.78 1B.-x0dx0a 这样,用户可以不断修改相继单元的内容,直到用ENTER键结束该命令为止。x0dx0a ·填写命令F(FILL),其格式为:x0dx0a -F range listx0dx0a例如:-F 4BA:0100 5 F3'XYZƎDx0dx0a 使04BA:0100~0104单元包含指定的五个字节的内容。如果list中的字节数超过指定的范围,则忽略超过的项;如果list的字节数小于指定的范围,则重复使用list填入,直到填满指定的所有单元为止。x0dx0a3)检查和修改寄存器内容的命令R(register),它有三种格式如下:x0dx0a ·显示CPU内所有寄存器内容和标志位状态,其格式为:x0dx0a -Rx0dx0a例如,-rx0dx0a AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000x0dx0a DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NCx0dx0a 18E4:0100 C70604023801 MOV WORD PTR [0204],0138 DS:0204=0000x0dx0a ·显示和修改某个寄存器内容,其格式为:x0dx0a -R register namex0dx0a例如,键入x0dx0a -R AXx0dx0a 系统将响应如下:x0dx0a AX F1F4x0dx0a :x0dx0a即AX寄存器的当前内容为F1F4,如不修改则按ENTER键,否则,可键入欲修改的内容,如:x0dx0ax0dx0a -R bxx0dx0a BX 0369x0dx0a :059Fx0dx0a则把BX寄存器的内容修改为059F。x0dx0a ·显示和修改标志位状态,命令格式为:x0dx0a -RF系统将响应,如:x0dx0a OV DN EI NG ZR AC PE CY-x0dx0a 此时,如不修改其内容可按ENTER键,否则,可键入欲修改的内容,如:x0dx0a OV DN EI NG ZR AC PE CY-PONZDINVx0dx0a 即可,可见键入的顺序可以是任意的。x0dx0a4)运行命令G,其格式为:x0dx0a -G[=address1][address2[address3?]]x0dx0a 其中,地址1指定了运行的起始地址,如不指定则从当前的CS:IP开始运行。后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。x0dx0a5)跟踪命令T(Trace),有两种格式:x0dx0a ·逐条指令跟踪x0dx0a -T [=address]x0dx0a 从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。如未指定地址则从当前的CS:IP开始执行。x0dx0a ·多条指令跟踪x0dx0a -T [=address][value]x0dx0a 从指定地址起执行n条指令后停下来,n由value指定。x0dx0a6)汇编命令A(Assemble),其格式为:x0dx0a -A[address]x0dx0a 该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:DEBUG把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明,如100D。x0dx0a7)反汇编命令U(Unassemble)有两种格式。x0dx0a ·从指定地址开始,反汇编32个字节,其格式为:x0dx0a -U[address]x0dx0a例如:x0dx0a -u100x0dx0a 18E4:0100 C70604023801 MOV WORD PTR[0204],0138x0dx0a 18E4:0106 C70606020002 MOV WORD PTR[0206],0200x0dx0a 18E4:010C C70606020202 MOV WORD PTR[0208],0202x0dx0a 18E4:0112 BBO4O2 MOV BX,0204x0dx0a 18E4:0115 E80200 CALL 011Ax0dx0a 18E4:0118 CD20 INT 20x0dx0a 18E4:011A 50 PUSH AXx0dx0a 18E4:011B 51 PUSH CXx0dx0a 18E4:011C 56 PUSH SIx0dx0a 18E4:011D 57 PUSH DIx0dx0a 18E4:011E 8B37 MOV SI,[BX]x0dx0a如果地址被省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。x0dx0a ·对指定范围内的存储单元进行反汇编,格式为:x0dx0a -U[range]x0dx0a例如:x0dx0a -u100 10cx0dx0a 18E4:0100 C70604023801 MOV WORD PTR[0204],0138x0dx0a 18E4:0106 C70606020002 MOV WORD PTR[0206],0200x0dx0a 18E4:010C C70606020202 MOV WORD PTR[0208],0202x0dx0a或x0dx0a -u100 112 x0dx0a 18E4:0100 C70604023801 MOV WORD PTR[0204],0138x0dx0a 18E4:0106 C70606020002 MOV WORD PTR[0206],0200x0dx0a 18E4:010C C70606020202 MOV WORD PTR[0208],0202x0dx0ax0dx0a 可见这两种格式是等效的。x0dx0a8)命名命令N(Name),其格式为:x0dx0a -N filespecs [filespecs]x0dx0a命令把两个文件标识符格式化在CS:5CH和CS:6CH的两个文件控制块中,以便在其后用L或W命令把文件装入存盘。filespecs的格式可以是:x0dx0a[d:][path] filename[.ext]x0dx0a例如,x0dx0a -N myprogx0dx0a -Lx0dx0a -x0dx0a可把文件myprog装入存储器。x0dx0a9)装入命令(Load),有两种功能。x0dx0a ·把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中。其格式为:x0dx0a -L[address[drive sector sector]x0dx0a ·装入指定文件,其格式为:x0dx0a -L[address]x0dx0a此命令装入已在CS:5CH中格式化了文件控制块所指定的文件。如未指定地址,则装入CS:0100开始的存储区中。x0dx0a10)写命令W(Write),有两种功能。x0dx0a ·把数据写入磁盘的指定扇区。其格式为:x0dx0a -W address drive sector sectorx0dx0a ·把数据写入指定的文件中。其格式为:x0dx0a -W[address]x0dx0a此命令把指定的存储区中的数据写入由CS:5CH处的文件控制块所指定的文件中。如未指定地址则数据从CS:0100开始。要写入文件的字节数应先放入BX和CX中。x0dx0a11)退出DEBUG命令Q(Quit),其格式为:x0dx0a -Qx0dx0a它退出DEBUG,返回DOS。本命令并无存盘功能,如需存盘应先使用W命令。
Ⅳ 简述DEBUG中A.R.D.Q.G命令的功能。thanks
* A[地址] 汇编命令
功能: 将指令直接汇编成机器码输入到内存中。
说明: 用于小段程序的汇编及修改目标程序,所有输入的数字均采用十六进制, 用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,该语句被汇编到 CS:0100区域。
例A:>DEBUG
-a 0100
08F1:0100 MOV AH,09
08F1:0102 MOV DX,109
08F1:0105 INT 21H;
08F1:0107 INT 21H;<-XP下运行cmd debug时,应该是INT 20H,21H会出遇无效指令错误
08F1:0109 db 'May I help you $'
08F1:0115←离开a状态
-g ←运行
May I help you 运行结果
Program terminated normally表示运行正常
* D[地址] 或D[起始地址][目的地址] 转储命令
功能: 以内存映象方式显示内存中的信息。
说明: 转储用左右两部分显示内存映象内容,左边以十六进制,右边以ASCⅡ字符显示,所有不可打印字符用句号(。)表示。每行显示16个字节的内容,在第八和第九个字节之间有一个连字符 - 此命令隐含的段地址为DS的值。若未指定起始地址,则D命令从显示的最后一个单元的下一个单元开始显示,若以前没有使用给D命令, 则从初使化的段寄存器的内容,加上地址偏移量 0100H 开始显示。
例:-d10,4f即为显示DS:4f的内容在D命令中如不指出段地址,则其默认为DS段。
如指明段地址,则从指明的段地址列出指定的范围
如:-dfff:00:0f
我们也可以指定长度来列出所需要内存内容
如:-d 100 L20即为显示由DS:100-DS:11F的内容,共20H个字节:
* G[=起始地址] [[断点]……] 执行命令
功能: 执行正在调试的程序,当达到断点时停止执行, 并且显示寄存器标志和下一条要执行的命令。
说明: 如果没有指定起始地址,那么当前指令地址由CS,IP寄存器的内容来决定,如果用户指定起始地址就从指定的起始地址开始执行。如果指定断点,当指令到达指令地址时停止执行,并显示各寄存器标志位的内容和下一条要执行的命令,最多允许用户设定10个断点。
例:A:\>debug tan.exe
-u:反编译成汇编语言程码
…………
. .
-g 100 指定中断点
Program terminated normally:
另外:我们在DEBUG下可运行一个文件.EXE
如:A:\>debug tan.exe
-g
即可开始运行此程序,和在DOS下完全一样:
* H[数值][数值] 十六进制算术运算命令
功能: 分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。
说明: 替用户完成简单的十六进制数的运算。
例:-h4538 5623
9B5B EF15
* Q 退出命令。
* R[寄存器] 寄存器命令
功能: 一,显示单个寄存器的内容,并提供修改功能。二,显示所有寄存器内容, 再加上字母标志位状态以及要执行的下一条指令。三,显示8个标志位状态, 并提供修改功能。若不想改变则回车即可。
例:-r bx
bx 0050
:51
-r
AX=0000 BX=0051 CX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0003 ES=0CD3 SS=0CD3 IP=0100 NV UP EI PL NZ NA PO NC
0CD3:0100 0F DB OF
若想改变标志寄存器,用-RF回车,则DEBUG会将标志内容显示出来,若想改变任一标志,只要输入该标志的名称即可。
标志名称 设置 未设置 标志名称 设置 未设置
滋出 OV(溢出) NV(未溢出) 零位 ZR NZ(不等于零)
方向 DN(减少) UP(增加) 辅助进位 AC NA(无进位)
中断 EI(许可) DI(禁止) 奇偶标志 PE(偶) PO(奇)
符号 NG(负) PL(正) 进位 CY NC(清除进位)
例:-Rf
NV UP EI PL NZ NA PO NC :-OV DI← 输入值
参考:http://ke..com/link?url=_IbV9ya-Y
Ⅳ 汇编语言中G(空格)5B代表什么
在debug中调试程序时,g命令是程序运行命令。空格后面跟的数是断点地址,程序运行到断点停止。
因此,G 5B 命令作用是: 从当前IP起运行,断点为005BH
Ⅵ 汇编语言debug 中 G命令怎么用
1、点击桌面左下角的【开始】;在搜索栏目中,输入cmd;在弹出的菜单中,选中cmd,回车。