_D[address]或_D[range]
-d100 120
0B3F:0100 0A 0D 54 57 4F 20 54 49-47 45 52 24 06 01 26 01 ..TWO TIGER$..&. 0B3F:0110 4A 01 06 01 06 01 26 01-4A 01 06 01 4A 01 5D 01 J.....&.J...J.]. 0B3F:0120 88 .
其中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
3
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 标志 溢出OF 方向DF 中断IF 符号SF 零位ZF 辅助AF 奇偶PF 进位CF 置位符号 OV DN EI NG ZR AC PE CY
表1-1 标志状态的表示符号
复位符号 NV UP DI PL NZ NA PO NC 4)运行命令G,其格式为:
-G[=address1][address2[address3?]]
其中,地址1指定了运行的起始地址,如不指定则从当前的CS:IP开始运行。后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。
5)跟踪命令T(Trace),有两种格式:
-T [=address]
从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。如未指定地址则从当前的CS:IP开始执行。
4
-T [=address][value]
从指定地址起执行n条指令后停下来,n由value指定。 6)继续命令P P[=地址] [数值]
P(Proceed)命令类似T命令,只是不会进入子程序或中断服务程序中。当不需要调试子程序或中断服务程序时(例如运行带有功能调用的指令序列),要用P命令,而不是T命令。
7)汇编命令A(Assemble),其格式为: -A[address]
该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:DEBUG把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明,如100D。
进行汇编的步骤如下:
①输入汇编命令A[地址],按回车。DEBUG提示地址,等待输入指令; ②输入汇编语言指令,按回车;
③如上继续输入汇编语言指令,直到输入所有指令;
④不输入内容就按回车,结束汇编,返回DEBUG的提示符状态。
A命令支持标准的8086/8088(和8087浮点)指令系统以及汇编语言语句基本格式,但要注意以下一些规则:
·所有输入的数值都是16进制数;
·段超越指令需要在相应指令前,单独一行输入; ·段间(远)返回的助记符要使用RETF; ·A命令也支持最常用的两个伪指令DB和DW。 8)反汇编命令U(Unassemble)有两种格式。
·从指定地址开始,反汇编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]
5
如果地址被省略,则从上一个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
9)命名命令N(Name),其格式为: -N filespecs [filespecs]
命令把两个文件标识符格式化在CS:5CH和CS:6CH的两个文件控制块中,以便在其后用L或W命令把文件装入存盘。filespecs的格式可以是:
[d:][path] filename[.ext]
-N myprog -L -
可把文件myprog装入存储器。 10)装入命令(Load),有两种功能。
·把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中。其格式为: -L[address[drive sector sector]
-L[address]
此命令装入已在CS:5CH中格式化了文件控制块所指定的文件。如未指定地址,则装入CS:0100开始的存储区中。
11)写命令W(Write),有两种功能。
-W address drive sector sector
-W[address]
此命令把指定的存储区中的数据写入由CS:5CH处的文件控制块所指定的文件中。如未指定地址则数据从CS:0100开始。要写入文件的字节数应先放入BX和CX中。
6
12)退出DEBUG命令Q(Quit),其格式为: -Q
它退出DEBUG,返回DOS。本命令并无存盘功能,如需存盘应先使用W命令。 其它DEBUG命令请参考其它资料。
注:DEBUG命令的格式
DEBUG的命令都是一个字母,后跟一个或多个参数:字母[参数]。 使用命令的注意事项: ⑴字母不分大小写;
⑵只使用16进制数,没有后缀字母“H”;
⑶分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符; ⑷每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行; ⑸命令如果不符合DEBUG的规则,则将以“error”提示,并用“^”指示错误位置。
许多命令的参数是主存逻辑地址,形式是“段基地址:偏移地址”。其中,段基地址可以是段寄存器或数值;偏移地址是数值。如果不输入段基地址,则采用默认值,可以是缺省段寄存器值。如果没有提供偏移地址,则通常就是当前偏移地址。
对主存操作的命令还支持地址范围这种参数,其形式是:“开始地址 结束地址”(结束地址不能具有段基地址),或者是:“开始地址L字节长度”。
1.3 汇编语言程序的开发方法
源程序的开发过程都需要编辑、汇编、连接等步骤。源程序的命令行开发方法只需要几个文件: ⑴汇编程序:MASM5.X是MASM.EXE;或者MASM 6.x是ML.EXE和ML.ERR,如果在“纯DOS”环境还需要DOSXNT.EXE。
⑵连接程序:LINK.EXE。
⑶库管理程序:LIB.EXE(如果不创建子程序库,此文件也不需要)。 ⑷还需要一个文本编辑器(例如EDIT.COM)和调试程序(DEBUG.EXE)。
一、源程序的编辑
编辑是形成源程序文件(.ASM)的过程,它需要文本编辑器。例如,DOS中的全屏幕文本编辑器EDIT,或读者已经熟悉的其他程序开发工具中的编辑环境(像Turbo C),或者windows下的记事本。
二、源程序的汇编
汇编是将汇编语言源程序文件翻译为由二进制机器代码组成的目标模块文件(.OBJ)的过程,它需要借助汇编程序。如MASM5.x的汇编程序MASM.EXE,或者MASM6.x的汇编程序ML.EXE,ML.ERR。(以下以masm5.0版本为例介绍,假设当前路径为D:\\HUIBIAN)
假设在磁盘上已建立了一个EXAMPLE.ASM源程序,汇编过程操作如下所示: 在DOS提示符下键入:MASM <源程序文件名> D:\\HUIBIAN>MASM EXAMPLE↙
Microsoft (R) Macro Assembler Version 5.00
7