《微机原理及应用》实验教程
注:在用W命令前,以N命名命令指定一个文件名,用R命令修改寄存器BX和CX的内容为新写文件的长度。如W命令中缺省地址项,则地址以CS:100为起始地址,否则以指定地址为待写数据的起始地址。
将内存中指定范围内一段存储单元的内容保存成硬盘中指定的文件。指定的范围也就是文件的大小要先送到BX和CX寄存器中,即从程序起始地址开始将BX×10000H+CX个字节的内容存放到由N命令指定的文件中。BX中存放程序段地址的末地址与首地址的差(通常程序都存放在一个段中,即BX=0),CX中存放偏移地址的末地址与首地址的差+1。
以A命令中的程序为例: 程序从地址181D:0100开始,到181D:010D结束,则BX的内容为段地址差181D-181D=0000,CX的内容为偏移地址差010D-0100+1=000E。通常CX的长度,可以直接通过程序最后一条指令的下一条随机指令的首地址来计算,即010E-0100=000E。
-N EXM.COM ↙ 先给文件命名
-R BX ↙ 指定文件长度 BX:0000 :0000
-R CX ↙ CX:003C
:000E
-W 181D:0100 ↙ 指定程序的首地址 Writing 0000E bytes (10)装入命令 L
格式:L[起始地址] ↙或L ↙ 功能:将由N命令指定的文件装入到内存中指定起始地址的存储区。若省略起始地址,则装入到CS:100处或按原来文件定位约定装入到相应位置。
例1: -N D:\\TEST.COM 将TEST.COM程序装入内存
-L ↙ -U ↙装入后用U命令查看程序装载地址
注:装载的如果是一段程序则装载的地址必须和写入时一致,如不确定地址,在L后可不加入地址,由系统指定地址。如果是数据文件则无此要求。
例2: -N D:\\TEST.DAT
-L DS: 200 ↙ 将TEST.DAT数据文件装入到内存DS:200处
(11)输入指令I 格式:I [端口地址] ↙
功能:I/O端口访问,从指定的端口输入并显示一个字节。 (12)输出指令O
格式:O[端口地址] [字节] ↙
功能:I/O端口访问,发送字节到指定的输出端口。 (13)十六进制算术运算命令H 格式:H[十六进制数][十六进制数] ↙
功能:将两个十六进制数相加和相减,其结果在下一行中显示出来。 例:-H 3F 01 ↙
7
《微机原理及应用》实验教程
0040 003E (14)传送命令M 格式:M[范围] [地址] ↙
功能:将某一指定的存储区的内容拷贝至另一指定的存储区。 例:将程序所生成的数据拷贝到以300为起始地址的存储区中
-M DS:200 264 300 ↙
用D DS:300 364查看拷贝结果。为了验证拷贝是否完全正确DEBUG下提供了一比较命令C。 (15)比较命令C 格式:C[范围] [地址] ↙ 功能[:比较两存储块的内容。 例:对上面新拷贝的数据进行比较
-C DS:200 264 300 ↙
假如存储块中有一两个单元的内容不一样结果又如何呢?可用E命令改变存储单位的内容。 (16)检索命令S 格式:S [范围] [清单] ↙
功能:在指定存储区中检索清单中的字符(串)。 例:-S DS:300 400“ABCD” ↙
除了前面提到的E命令可修改存储单位内容外F命令也可对存储单元进行修改。 (17)填写命令F
格式:F [范围] ][清单] ↙或F [起始地址] [L字节个数] [清单]↙ 功能:用清单中的值填写指定范围内的存储单元。 例1:-F DS:400 41F F3“XYZ”ZA
用0F3H,58H,59H,5AH,2AH字符串重复填写以DS:400~41F为起始地址的20H个单元,可执行 -D DS:400观察结果
例2:-F DS: 500 L10 “XYZ” 10是10H,即16个字节 用58H,59H,5AH重复填写DS:0500-DS:0510单元。 (18)退出命令 Q
格式:Q ↙
功能:退出DEBUG,返回到操作系统。
以上介绍的是DEBUG常用命令,其他命令请参考相关书籍。
练习程序:
1、将0-99这100个数依次存放到1000:0000为首地址的存储单元中。 xxxx:0100 MOV AX,1000 ;数据段地址
MOV DS, AX
XOR BX, BX ;清零
MOV CX, 0064 ;置循环次数 MOV AL,00
xxxx:010C MOV [BX],AL
8
《微机原理及应用》实验教程
INC AL
DAA ;加法的十进制调整
INC BX
LOOP 010C ;跳转到010c处 INT 03
所对应的宏汇编格式的程序:
DATA SEGMENT 32 DW DUP(?) DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA START: MOV AX,1000H
MOV DS, AX
XOR BX, BX MOV CX, 0064H MOV AL, 00H A1: MOV [BX], AL
INC AL DAA INC BX
LOOP A1
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
四、实验步骤
通过练习程序,熟悉相关的DEBUG命令。 (1)用A命令逐条输入程序语句; (2)用U命令检查程序输入情况; (3)保存该程序到硬盘中;
1> 先计算该段程序的大小(末地址减首地址加1),分别在BX和CX送入相应的数值; 2> 用N命令给程序起文件名;
例:-N C:\\STU\\文件名.COM ↙ 此时保存的文件后缀名只能是.COM。
3> 用W命令将程序写入到一个指定的目录下的文件或由计算机的默认路径选择目录。 例:-W xxxx:xxxx 或-W ↙ 此时可检查指定路径的文件是否生成。 (4)用Q命令退出DEBUG环境;
(5)用DEBUG 路径:\\文件名.COM 的格式,将刚才生成的文件重新装入到内存中; (6)用U命令,查看程序转载的地址; (7)用G命令运行程序;
例:-G=xxxx:xxxx 从程序装载处的地址开始运行
(8)查看运行结果。结果在寄存器中,用R命令查看,结果在存储单元中,用D命令查看。
五、实验报告要求
参考前言内相关部分内容。
9
《微机原理及应用》实验教程
六、实验注意事项
要注意针对寄存器和内存单元处理命令的区别。保存内存数据到文件时,要注意BX的大小是否正确,否则会使生成的数据文件大小超过实际值。
七、思考题
1、 总结DEBUG各命令的使用方法。
2、 总结利用DEBUG编写、调试程序的方法。
10