当前位置:文档之家› 实验一: 调试工具DEBUG的使用

实验一: 调试工具DEBUG的使用

《微型计算机技术实验》
实验一:调试工具DEBUG的使用
一.实验目的
掌握调试工具DEBUG的使用方法,理解汇编指令、存储单元和寄存器等有关概念,能够对简单的汇编语言程序进行调试。

二.实验内容
(1)学习调试工具DEBUG的使用方法,熟悉DEBUG常用命令的功能和用法。

(2)利用DEBUG调试简单的汇编语言程序,体会汇编指令的功能、寄存器的作用、存储单元地址与内容的概念和作用、以及程序的执行过程。

三.实验要求
(1)掌握DEBUG的常用命令和基本的程序调试方法
(2)熟悉和掌握指令系统常用指令的功能和用法,能熟练运用DEBUG调试工具调试简单的程序
四.实验指导
1、DEBUG 命令使用
1)键入 DEBUG 进入 DEBUG 控制状态,显示提示符 '- '。

例如:C:\DEBUG
-
2)用命令 F 100 10F 'A' 将'A'的ASCII码填入内存。

(命令格式: F<范围><单元内容表>)
3)用命令 D 100 10F 观察内存中的十六进制码及屏幕右边的ASCII字符。

(命令格式: D<地址范围>)
4)用命令 F 110 11F 41 重复上二项实验,观察结果并比较。

5)用命令 E 100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的十六进制数是什么字符的ASCII码? (命令格式: E<地址><批单元内容表>)6)用R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。

7)用R命令将AX,BX内容改写为1050H及23A8H。

(命令格式: R<寄存器名>)
2、常用指令练习
1)内存操作数及各种寻址方式使用
①用A命令在内存100H处键入下列内容:
(注意:MOV 传送指令,INC加一指令,DEC 减一指令)
-A 0100
MOV AX,1234
MOV [1000],AX
MOV BX,1002
MOV BYTE PTR[BX],20
MOV DL,39
INC BX
MOV [BX],DL
DEC DL
MOV SI,3
MOV [BX+SI],DL
MOV [BX+SI+1],DL
MOV WORD PTR[BX+SI+2],2846
(在此按下CTRL+C退出A命令)
②用T命令逐条运行这些指令。

(命令格式: T[=<地址>][<条数>])
③每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注意理解是什么寻址方式。

注意:D命令显示结果中右边的ASCII字符及双字节数存放法(低对低,高对高)。

2)传送指令
①用A命令在内存100H处键入下列内容:
-A 0100↙
****:0100 MOV AX,1234↙
****:0103 MOV BX,5678↙
****:0106 XCHG AX,BX↙
****:0108 MOV AH,35↙
****:010A MOV AL,48↙
****:010D MOV DX,75AB↙
****:010F XCHG AX,DX↙
****:0111 (在此按下CTRL+C退出A命令)
注:****为段寄存器CS的值,是由计算机随机产生的。

②用U命令检查键入的程序并记录,特别注意左边的机器码。

(命令格式:U <地址>)
-U 0100↙
③用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。

并注意标志位有无变化。

-T=0100↙
-T↙
-T↙

3)加减法指令:
①用A命令在内存100H处键入下列内容:
MOV AH,34
MOV AL,22
ADD AL,AH
SUB AL,78
MOV CX,1284
MOV DX,5678
ADD CX,DX
SUB CX,AX
SUB CX,CX
②用U命令检查键入的程序及对应的机器码。

③用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。

4)验证性实验
DATA SEGMENT
STR1 DB 'ASDFGHJK'
CN EQU $-STR1
STR2 DB 'ASDFGTYU'
FLAG DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV FLAG,1
MOV SI,OFFSET STR1
MOV DI,OFFSET STR2
MOV CX,CN
CLD
REPZ CMPSB
JZ NEXT
MOV FLAG,0
NEXT: MOV AH,4CH
INT 21H
CODE ENDS
END START
①用用文字编辑工具(常用EDIT或记事本)将源程序输入,其扩展名为‚**.ASM‛
②用MASM对源文件进行汇编,产生‚**.OBJ‛文件和‚**.LST‛文件。

若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。

③用LINK将‚**.OBJ‛文件连接成可执行的‚**.EXE‛文件。

④用DEBUG的U命令进行反汇编,得到该程序所在地址的起点和终点(①进入DEBUG时输入‚DEBUG **.EXE‛②再输入U命令将**.EXE 反汇编成机器代码)
⑤用DEBUG的G命令执行该程序(连续执行G 命令,格式:G=[address1][address2] 例如:G=0000 0021)
⑥用DEBUG的D命令查看内存单元FLAG的情况
⑦修改数据段为:
DATA SEGMENT
STR1 DB ‘ASDFGHJK’
CN EQU $-STR1
STR2 DB ‘ASDFGHJK’
FLAG DB ?
DATA SEGMENT
保存后重新执行实验步骤2~6,观察实验结果。

附:动态调试器DEBUG 使用
1、键入 DEBUG 进入 DEBUG,显示提示符 '-'。

2、退出DEBUG命令:Q
3、显示内存命令:D 起始地址结束地址
4、修改内存命令:E 起始地址,连续修改键入空格键,键入回车键退出E命令。

5、检查寄存器命令:R
6、修改寄存器命令:R 寄存器名
7、小汇编命令:A 起始地址,不输入指令键入回车键退出A命令。

8、反汇编命令:U 起始地址结束地址
9、运行命令:G=起始地址结束(断点)地址
10、单步命令:T=起始地址运行指令数,进入子程序内部。

表1 标志寄存器显示内容一览表
标志位显示标志为1 标志为0 OF 溢出(是/否) OV NV DF 方向(减量/增量) DN UP
IF 中断(允许/关闭) EI DI SF 符号(负/正) NG PL ZF 零(是/否) ZR NZ AF 辅助进位(是/否) AC NA PF 奇偶(偶/奇) PE PO CF 进位(是/否)CY NC。

相关主题