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 OP 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← 输入值
S[地址范围] [字符串]
功能: 在指定的地址范围内查找给定的字符串。
说明: 用来指定在地址范围内查找一个字符串,若找到则显示其地址, 否则直接显示DEBUG提示符。隐含地址为DS段值。
在此内存可以用(起始地址)(终止地址)或(起始地址)L(长度)的方式来表示,而字符串与数据行则可混合使用:如:02.76\。 例:-d100 lof
08F1:0100 OF 2A 41 43 0B 31 42 96 -FF F0 B9 8A F3 00 B1.. AC,1B... -S 100 L 0f \
08F1:0102← 表示找到,由0102开始,
T[=地址][指令条数] 跟踪命令
功能: 逐条跟踪程序的执行,每条指令执行后都将显示各寄存器的内容。
8
说明: 通常采用跟踪一条指令,但用户也可以用指令条数设定一次跟踪多条指令, 每执行一条指令之后,显示所有寄存器的内容和标志状态。 逐条指令跟踪 -T[=起始地址]
从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值,如来指定地址则从当前CS:IP开始执行。 A:\\>DEBUG -A
08F1:0100 MOV DL,03H 08F1:0102 MOV AH,02H 08F1:0104 INT 21H 08F1:0106 INT 20H 08F1:0108 -T
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=08F1 ES=08F1 SS=08F1 CS=08F1 1P=0105 NV UP EI PL NZ PO CY 09F1:0102 B402 MOV AH,02
若指定起始地址,则T命令会从指定的地址开始跟踪,我们还可以指定跟踪一次所运行指令的个数,用Ctrl+S暂停屏幕的显示,以便观察。
-t=100 10;由CS:100开始跟踪10条指令
U[起始地址]或者[地址范围]
功能: 将内存中的内容转换为汇编语句。
说明: 反汇编的字节数取决与用户的系统显示形式,以及在U命令中使用的可选项。 (1)从指定地址开始编译,反汇编32个字节 -U[地址]←从CS:100开始,其反汇编32个字节
如果地址被省略,则从一个U命令的最后一条指令的下一条单元开始汇编32个字节。 (2)对指定的存贮范围进行反汇编 -u起始地址 终止地址(L 长度) 例:-U 100 109
08F1:0100 CD20 INT 20
08F1:0102 FF9F009A CALL FA12[BX+9A00] 08F1:0106 F0 LOCK
08F1:0107 FE1D CALL FAR [DI] 08F1:0109 F0 LOCK
说明:如指定了范围则整个范围全都会被反编译
9
W写盘命令
* W[地址] [盘符:] [起始扇区] [扇区数] 写盘命令 功能: 将修改过的数据写到磁盘上。
说明: 可以将指定内存地址开始的数据写在磁盘上,可以在没有指定参数, 或指定地址参数的情况下,将调试文件写在磁盘上。
在运行W时需设置文件的大小CX或BX寄存器 (1)把数据写入磁盘的指定扇区
-W 起始地址 驱动器名 起始扇区 扇区数 (2)把数据写入指定文件中 -W 起始地址 例A:\\>DEBUG -A
08f1:0100.... . 写入程序段 08F1: 012A.... -R CX CX:0000
:2A←写入字节数,即为程序结尾地址减起始地址 -n tan.com←设置文件名,需后缀为com -w
Wring 002A bytes -q
A:\\>TAN←即可执行此程序 * \命令:释放EMS内存 例:-XD 0001
handle 0001 deallocatel←释放了 利用XD释放后可再分配
*\命令;把扩充内存上的内存页区映射到主内存区 格式:XM RAM 长页码 主内存页码句柄
例:-XM3 2 0001←把0001号句柄的第3号逻辑页区映射到2号真实页区 Logical page 03 mapped to physical page 02 *\命令:显示当前EMS使用情况。 格式 -XS
10
第二部分 DOS系统功能调用
1、什么是DOS系统功能调用
系统功能调用是DOS为用户提供的常用子程序(80多个),可在汇编语言程序中直接调用。这些子程序的
主要功能包括:
(1)设备管理(如键盘、显示器、打印机、磁盘等的管理) (2)文件管理和目录操作
(3)其他管理(如内存、时间、日期等管理) 这些子程序给用户编程带来很大方便,用户不必了解有关的设备、电路、接口等方面的问题,只需直接调用即可。
2、调用方法
DOS功能调用的子程序已按顺序编号——功能号(00H~68H),其调用方法是: (1) 功能号→AH
(2) 入口参数→指定寄存器 (3) INT 21H
用户只须给出以上三方面信息,DOS就可根据所给信息自动转入相关子程序执行。 3、常用的系统功能调用
(1)键盘输入
1) 1号调用——从键盘输入单个字符 调用格式: MOV AH,1 INT 21H
功能: 等待从键盘输入一个字符并送入AL。
执行时系统将扫描键盘,等待有健按下,一旦有健按下,就将其字符的ASCII码读入,先检查是否Ctrl-Break,若是,退出命令执行;否则将ASCII码送AL,同时将该字符送显示器显示。
2) 10号调用——从键盘输入字符串 功能: 从键盘接收字符串送入内存的输入缓冲区,同时送显示器显示。 调用前要求: 先定义一个输入缓冲区
MAXLEN DB 100 ;第1个字节指出缓冲区能容纳的字符个数,即缓冲区长度,不能为0
ACLEN DB ? ;第2个字节保留,以存放实际输入的字符个数
STRING DB 100 DUP(?) ;第3个字节开始存放从键盘输入的字符串。 调用格式: LEA DX,MAXLEN(缓冲区首偏移地址) MOV AH,10 INT 21H
1
注意:调用时,要求DS:DX指向输入缓冲区 【例】
DATA SEGMENT MAXLEN DB 100 ACLEN DB ?
STRING DB 100 DUP(?) DATA ENDS CODE SEGMENT … …
MOV AX,DATA MOV DS,AX … …
LEA DX,MAXLEN MOV AH,10 INT 21H … …
CODE ENDS
运行程序时,若从键盘输入“YOU ARE SUCESSFUL!”(共计19个字符),则输入缓冲区MAXLEN各单元内容
缓冲区MAXLEN各存储单元内容
(2)显示输出
1) 2号调用——在显示器上显示输出单个字符 调用格式: MOV DL,待显示字符的ASCII码 MOV AH,2 INT 21H
功能:将DL中的字符送显示器显示。 【例】显示输出大写字母A
MOV DL,41H ;或写为 MOV DL,'A' MOV AH,2 INT 21H
2) 9号调用——在显示器上显示输出字符串 调用格式: LEA DX,字符串首偏移地址 MOV AH,9 INT 21H
功能:将当前数据区中DS:DX所指向的以'$'结尾的字符串送显示器显示。 【例】在显示器上显示字符串“YOU ARE SUCESSFUL!” DATA SEGMENT
STRING DB ' YOU ARE SUCESSFUL! $ ' DATA ENDS CODE SEGMENT … …
MOV AX,DATA MOV DS,AX
2