当前位置:文档之家› DEBUG 指令说明

DEBUG 指令说明

DEBUG.EXE指令说明

DEBUG [执行文件名] [执行该文件的外带参数]
a [sta] 编写汇编语言程序的指令,sta为启始地址
c sta end sta2 比较两个储存单元,sta为第一储存单元的启始地址,而end为第一储存单元结束地址,sta2为第二储存单元的启始地址
c sta lnn sta2 比较两储存单元,sta为第一储存单元启始地址,而nn为欲比较的长度大小,sta2为第二储存单元启始地址
d [sta] [end] 显示某指定范围储存单元至屏幕(sta:启始、end:结束)
d [sta] [lnn] 显示某指范围块储存单元至屏幕(sta:启始、nn:长度)
e [sta] 修改储存单元中某一个byte的资料,sta为地址
e [sta] [data] 修改储存单元中某一个byte的资料,data为新资料
g [end] 执行程序,直至结束地址(end)或程序结束时
g=sta [end] 执行从启始(sta)直至结束(end)或程序结束时
r [reg] 显示所有存储器内容或修改某指定存储器(reg)值
t [num] 单步执行,num指定一次执行几步(预设1)
t=sta [num] 单步执行,从sta起始,num指定执行几步(预设1)
n filename 为目前正在编辑或除错的文件命名
w [sta] 储存文件,写入cx个bytes的资料至n指定的文件名
w sta dri sec num 将sta资料写入dri磁盘的第sec磁区共写num个磁区
l [sta] 载入文件,读出n指定文件,档名的资料至sta地址中
l sta dri sec num 读出dri磁盘的第sec磁区的资料至sta共读num个磁区
q 离开debug,返回DOS
u [sta] [end] 反汇编,从sta至end
u [sta] [lnn] 反汇编,从sta,共反汇编nn个bytes
m sta end sta2 将第一储存单元的数据搬至第二储存单元中
m sta lnn sta2 将第一储存单元的数据搬至第二储存单元中
f sta end data 将一段资料(data)存入某指定的储存单元区
f sta lnn data 将nn个bytes的资料存入某指定的储存单元区
s sta end data 搜寻data资料在指定地址内,data不限长度
s sta lnn data 搜寻data资料在指定地址内,data不限长度
h data data2 计算两个资料的和与差并显示在屏幕上
i inport 由输入埠输入并显示一个byte
o outport 由输出埠输出一个byte值

Debug
启动 Debug,它是可用于测试和调试 MS-DOS 可执行文件的程序。
Debug [[drive:][path] filename [parameters]]
参数
[drive:][path] filename
指定要测试的可执行文件的位置和名称。
parameters
指定要测试的可执行文件所需要的任何命令行信息。
++
说明
使用 Debug 命令但不指定要测试的文件
如果使用没有位置和文件名的 Debug 命令,然后键入所有的 Debug 命令以响应 Debug
提示符,连字符 (-)。
Debug 命令
以下是 Debug 命令列表:
? 显示 Debug 命令列表。
a 汇编 8086/8087/8088 记忆码。
c 比较内存的两个部分。
d 显示部分内存

的内容。
e 从指定地址开始,将数据输入到内存。
f 使用指定值填充一段内存。
g 运行在内存中的可执行文件。
h 执行十六进制运算。
i 显示来自特定端口的 1 字节值。
l 将文件或磁盘扇区内容加载到内存。
m 复制内存块中的内容
/n 为 l 或 w 命令指定文件,或者指定正在测试的文件的参数。
o 向输出端口发送 1 个字节的值。
p 执行循环、重复的字符串指令、软件中断或子例程。
q 停止 Debug 会话。
r 显示或改变一个或多个寄存器。
s 在部分内存中搜索一个或多个字节值的模式。
t 执行一条指令,然后显示所有寄存器的内容、所有标志的状态和 Debug 下一步要执行
的指令的解码形式。
u 反汇编字节并显示相应的原语句。
w 将被测试文件写入磁盘。
xa 分配扩展内存。
xd 释放扩展内存。
xm 映射扩展内存页。
xs 显示扩展内存的状态。
分隔命令参数
所有 Debug 命令都接受参数,除了 q 命令之外。可以用逗号或空格分隔参数,但是只
有在两个十六进制值之间才需要这些分隔符。因此,以下命令等价:
dcs:100 110
d cs:100 110
d,cs:100,110
指定有效地址项
Debug 命令中的 address 参数指定内存位置。Address 是一个包含字母段记录的二位名
称或一个四位字段地址加上一个偏移量。可以忽略段寄存器或段地址。a,g,l,t,u
和 w 命令的默认段是 CS。所有其他命令的默认段是 DS。所有数值均为十六进制格式。

有效地址如下:
CS:0100
04BA:0100
在段名和偏移量之间要有冒号。
指定有效范围项
Debug 命令中的 range 参数指定了内存的范围。可以为 range 选择两种格式:起始地
址和结束地址,或者起始地址和长度范围(由 l 表示)。
例如,下面的两个语法都可以指定从 CS:100 开始的 16 字节范围:
cs:100 10f
cs:100 l 10
++
Debug 子命令
选择 Debug 命令以获得详细信息。
Debug:A(汇编)
Debug:C(比较)
Debug(转储)
Debug:E(键入)
Debug:F(填充)
Debug:G(转向)
Debug:H(十六进制)
Debug:I(输入)
Debug(加载)
Debug:M(移动)
Debug:N(名称)
Debug:O(输出)
Debug(执行)
Debug(退出)
Debug:r(寄存器)
Debug:s(搜索)
Debug:T(跟踪)
Debug:U(反汇编)
Debug:W(写入)
Debug:XA(分配扩展内存)
Debug:XD(取消分配扩展内存)
Debug:XM(映射扩展内存页)
Debug:XS(显示扩展内存状态)


DEBUG的使用方法二

以下这些简单的解释可以让一个汇编语言新手使用DEBUG:


0)在使用时,如何快速获得debug的使用帮助呢。
1)让我们开始工作吧,例如:显示BIOS的日期。
2)在你的电脑的https://www.doczj.com/doc/d4860517.html,文件

里搜寻“IBM”这几个字符。
3) 一位十六进制数的运算。
4) 检查 x86寄存器内容。
5)我们来编写我们的第一个用机械语言编写的程序-打印一个字符。
6) 我们现在用汇编语言指令来做和例5一样的事情。
7)现在,我们不但要编写一个汇编程序,而且我们还要把它存盘。
8) 现在,我们试一试查看一个已经编好的程序。
9)你可以用DEBUG的计算功能计算程序的长度。
10)另一种显示在屏幕上字符串的方法。
11)让我们试一试反复输出。
12)我们现在把两个程序连接起来。
13) 让我们逐步运行这个刚刚修补的程序。
14)如果一开始的命令不是跳转命令,那么可能就要用这种方法了.。


--------------------------------------------------------------------------------


以下所有的命令都是可以运行在WIN9x的MS-DOS方式下的。
进入MS-DOS的方式有:
[开始][程序][MS-DOS方式]

[开始][运行][打开]COMMAND[确定]

或者你可以双击它:
C:\Windows\https://www.doczj.com/doc/d4860517.html,


--------------------------------------------------------------------------------

0)在使用时,如何快速获得debug的使用帮助呢
以下PROMPT>表示目录提示符:一般为:C:\WINDOWS\COMMANDPROMPT> DEBUG /?<按回车press the enter key now>
怎样?出错了吧。显示如下
C:\WINDOWS>DEBUG/?
Runs Debug, a program testing and editing tool.

DEBUG [[drive:][path]filename [testfile-parameters]]

[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


)让我们开始工作吧,例如:显示BIOS的日期
(以下PROMPT>表示目录提示符:一般为:C:\WINDOWS\COMMAND\)

PROMPT> DEBUG<按回车>
-D FFFF:0006 L 8<按回车> (显示 FFFFh, 偏移地址 6h, 长度 8 bytes)
在作者的电脑上这里显示为 "1/10/96."
译者的电脑显示“ FFFF:0000 37 2F-30 36 2F 30 30 00 7/06/00.”相信作者的电脑里也是用这种格式显示的。这里显示出来的是使用者BIOS的日期,有兴趣的话可以重新开机看看,注意开机时的显示。
-Q<按回车> (退出DEBUG)

思考:当只按DEBUG的时候,编辑的是什么?为什么可以找到BIOS的日期?(译者这里也不是很清楚所以请大家知道的也留言给斑竹,改正。译者认为可能是内存的真实物理地址。)


2)在你的电脑的https://www.doczj.com/doc/d4860517.html,文件里搜寻“IBM”这几个字符
下面的“C:\Win95\”是根据每不电脑不同的。像译者的电脑里就是“C:\WINDOWS”

PROMPT> DEBUG C:\Win95\https://www.doczj.com/doc/d4860517.html,<按回车>
-S 0 L FFFF "IBM"<按回车>(从0开始搜寻"IBM",搜寻FFFFh多个单元格)
-Q<按回车> (退出DEBUG)

以下是译者做的:

C:\WINDOWS>DEBUG C:\WINDOWS\https://www.doczj.com/doc/d4860517.html,
-S 0 L FFFF "IBM"
-S 0 L FFFF "COMMAND"
12A7:008D
12A7:04F7
12A7:3870
12A7:38BE
12A7:38DD
-S 0 L FFFF "PATH"
12A7:38AD
12A7:CC

B7
12A7:CF55
-S 0 L FFFF "COMSPEC"
12A7:38D4
12A7:3A4D
12A7:CCC4
-Q

C:\WINDOWS>

(注意:搜寻是要区分大小写的)
(你可以看到上面是没有找到“IBM”的, 可以试一试"PATH" , "COMSPEC" , "COMMAND")
(注意: 这种方法用在查找加密资料和已被删除的资料等方面时是十分有用的)

3) 一位十六进制数的运算:

PROMPT> DEBUG<按回车>
-H 9 1<按回车> (加减两个十六进制的数, 9h+1h=Ah & 9h-1h=8h)
结果是显示: 000A 0008
-Q<按回车> (退出DEBUG)

C:\WINDOWS>debug
-h 9 1
000A 0008
-q
C:\WINDOWS>

4) 检查x86寄存器内容

PROMPT> DEBUG<按回车>
-R<按回车> (显示x86寄存器内容)
-Q<按回车> (退出DEBUG)

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程序状态寄存器


(这里有一点必须讲明白的现在在,其实从奔腾开

始这些寄存器(除了所有段寄存器,标志寄存器 )都是32位的。并且加多了两个16位段寄存器FS,GS。dos下面看到这些寄存器是16位的。要看32位寄存器可以使用soft-ice。对于FS,GS的作用我也不是很清楚,希望有高手指点,谢谢。)


5)我们来编写我们的第一个用机械语言编写的程序-打印一个字符
(这里用机械语言的主要原因是考虑到有一些用户不懂汇编命令,现在就要让他有一个认识计算机程序实质是一些数字)


PROMPT> DEBUG<按回车>
-E 100<按回车> (在偏移地址为100的地方输入机械指令程序)
B4<按空格>02<按空格> (在AX寄存器的前八位存入02)
B2<按空格>41<按空格> (在DX寄存器的后八位存入41h,41h就是大写A的ASCII码,身边有ASCII表的朋友可以对着表改改数字试一试)
CD<按空格>21<按空格> (当AH=02时这是DOS显示输出的中断号)
CD<按空格>20<按回车> (退出DOS)
-G<按回车> (程序运行,并在屏幕上显示出“A”)
程序运行完以后你将看到"Program terminated normally"(程序正常结束了).
-U 100<按回车> (我们把它反汇编,就是把机械命令变为汇编语言指令)
107F:0100 B402 MOV AH,02
:0102 B2 MOV DL,41
:0104 CD21 INT 21
:0106 CD20 INT 20
(下面会有一堆无用的东西)
(对了,你的段地址可能与我的段地址CS=107F不同哦)
-R<按回车> (让我们来看看寄存器的值; IP==100h, AX==0000h, DX==0000h)
好极了,我们看到电脑又做好了准备下一次运行程序了。
-T<按回车> (执行第一步操作... IP=>102h, AX=>0200h,指令指针寄存器指向下一条命令,AX的值被改变。
-T<按回车> (执行第二步操作... IP=>104h, , DX=>0041h,指令指针寄存器指向下一条命令,DX的值被改变。
-P<按回车> (继续执行 INT 21,IP=>106h, AX=>02h,)
-P<按回车> (继续执行INT 20)
-Q<按回车> (退出DEBUG)
(注意:你必须小心使用"T".因为如果你在程序完结以后继续执行这条命令,因为我们无法预知下面的指令是什么,所以我们也无法预知它可能带来的后果)
C:\WINDOWS>DEBUG
-E 100
127C:0100 B4.B4 02.02 B2.B2 41.41 CD.CD 21.21 CD.CD 20.20
-G
A
Program terminated normally
-U 100
127C:0100 B402 MOV AH,02
127C:0102 B241 MOV DL,41
127C:0104 CD21 INT 21
127C:0106 CD20 INT 20
127C:0108 C706F1E30900 MOV WORD PTR [E3F1],0009
127C:010E EB59 JMP 0169
127C:0110 57 PUSH DI
127C:0111 BFF1E3 MOV DI,E3F1
127C:0114 8BDF MOV BX,DI
127C:0116 06 PUSH ES
127C:0117 0E PUSH CS
127C:0118 07 POP ES
127C:0119 32D2 XOR DL,DL
127C:011B EB34 JMP 0151
127C:011D 006B12 ADD [BP+DI+12],CH
-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:01

00 B402 MOV AH,02
-T

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


) 现在,我们不但要编写一个汇编程序,而且我们还要把它存盘
(下面这个程序就要比原来的程序复杂一点了-显示输出:"ABC")



PROMPT> DEBUG<按回车>(运行DEBUG程序;系统默认启始IP寄存器值为100h)
-A 100<按回车> (用汇编语言编写一个程序,启始地址是100h)
MOV AH,02<按回车> (选择DOS的02号功能调用, 显示输出)
MOV DL,<按回车> (在DX寄存器的后八位存入41h,41h就是大写A的ASCII码)
INT 21<按回车> (当AH=02时这是DOS显示输出的中断号,显示"A")
MOV DL,42<按回车> (在DX寄存器的后八位存入41h,41h就是大写B的ASCII码)
INT 21<按回车> (当AH=02时这是DOS显示输出的中断号,显示"B")
MOV DL,43<按回车> (在DX寄存器的后八位存入41h,41h就是大写C的ASCII码)
INT 21<按回车> (当AH=02时这是DOS显示输出的中断号,显示"C")
INT 20<按回车> (程序结束,退出DEBUG)
<按回车> (结束汇编命令输入,回到DEBUG命令输入)
-R BX<按回车> (查看寄存器BX的值)
0000<按回车> (设置BX为0000h,这是程序的结尾地址是BX:CX)
(注意,只要BX = 0000, 文件的大小就小于 < 64 Kb.)
-R CX<按回车> (设置CX为Fh,这是程序的长度:16位)
:0010<按回车> (现在我们可以把这个16字节的程序写入硬盘了)
-N https://www.doczj.com/doc/d4860517.html,<按回车> (将要存盘的程序命名

)
-W<按回车> (把这十六字节写到文件里面)
-Q<按回车> (退出DEBUG)
PROMPT> DIR https://www.doczj.com/doc/d4860517.html,<按回车>
这里将会报告这个文件的大小是16字节 (10h 字节).
PROMPT> https://www.doczj.com/doc/d4860517.html,<按回车>
会马上在屏幕上打印出"ABC"


C:\WINDOWS>DEBUG
-A 100
127C:0100 MOV AH,02
127C:0102 MOV DL,41
127C:0104 INT 21
127C:0106 MOV DL,42
127C:0108 INT 21
127C:010A MOV DL,43
127C:010C INT 21
127C:010E INT 20
127C:0110
-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 B402 MOV AH,02
-R BX
BX 0000
:
-R CX
CX 0000
:0010
-N https://www.doczj.com/doc/d4860517.html,
-W
Writing 00010 bytes
-Q
C:\WINDOWS>DIR https://www.doczj.com/doc/d4860517.html,
Volume in drive C has no label
Volume Serial Number is 28FB-70BA
Directory of C:\WINDOWS
PRINTABC COM 16 03-21-01 11:02 https://www.doczj.com/doc/d4860517.html,
1 file(s) 16 bytes
0 dir(s) 557,711,360 bytes free
C:\WINDOWS>PRINTABC
ABC
C:\WINDOWS>

这里可以有人告诉我,为什么要存入是BX:CX代表程序长度吗?

0000<按回车> (设置BX为0000h,这是程序的结尾地址是BX:CX)
(注意,只要BX = 0000, 文件的大小就小于 < 64 Kb.)
-R CX<按回车> (设置CX为Fh,这是程序的长度:16位)
:0010<按回车> (现在我们可以把这个16字节的程序写入硬盘了)
-N https://www.doczj.com/doc/d4860517.html,<按回车> (将要存盘的程序命名)
-W<按回车> (把这十六字节写到文件里面)
-Q<按回车> (退出DEBUG)
PROMPT> DIR https://www.doczj.com/doc/d4860517.html,<按回车>
这里将会报告这个文件的大小是16字节 (10h 字节).
PROMPT> https://www.doczj.com/doc/d4860517.html,<按回车>
会马上在屏幕上打印出"ABC"


C:\WINDOWS>DEBUG
-A 100
127C:0100 MOV AH,02
127C:0102 MOV DL,41
127C:0104 INT 21
127C:0106 MOV DL,42
127C:0108 INT 21
127C:010A MOV DL,43
127C:010C INT 21
127C:010E INT 20
127C:0110
-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 B402 MOV AH,02
-R BX
BX 0000
:
-R CX
CX 0000
:0010
-N https://www.doczj.com/doc/d4860517.html,
-W
Writing 00010 bytes
-Q
C:\WINDOWS>DIR https://www.doczj.com/doc/d4860517.html,
Volume in drive C has no label
Volume Serial Number is 28FB-70BA
Directory of C:\WINDOWS
PRINTABC COM 16 03-21-01 11:02 https://www.doczj.com/doc/d4860517.html,
1 file(s) 16 bytes
0 dir(s) 557,711,360 bytes free
C:\WINDOWS>PRINTABC
ABC
C:\WINDOWS>

这里可以有人告诉我,为什么要存入是BX:CX代表程序长度吗?

9)你可以用DEBUG的计算功能计算程序的长度。

一开始的时候你的程序初始地址是在0100h:
107F:0100 MOV AH,02 <--这就是 100h
你的程序的最后一行在010Eh:
107F:010E INT 20 <--最后一行
然后,最后一条命令的下一行的地址

是0110h:
107F:0110 <--这就是110h
所以,从0110h里减去100h我们得到得长度是10h 字节.

PROMPT> DEBUG<按回车>
-H 110 100<按回车> (这条命令将运算110h+100h和110h-100h)
0210 0010<按回车> (汇报 110h-100h=0010h; 16-byte 程序长度16位)
-Q<按回车> (退出DEBUG)



C:\WINDOWS>debug
-H 110 100
0210 0010
-Q

相关主题
文本预览
相关文档 最新文档