2024年6月8日发(作者:)

实验一 DEBUG的使用

实验目的:

通过实验掌握下列知识:

1、DOS命令: DIR,DEL,RENAME,FORMAT,COPY。

2、基本指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG

3、DEBUG的使用:掌握DEBUG的启动及其使用方法;学习DEBUG下机器汇编源

程序。

4、BCD码,ASCII码及用16进制数表示二进制码的方法。

5、常用寄存器: AX,BX,CX,DX,F,IP。

内容及步骤:

一、DOS常用命令练习:

二.DEBUG的启动:

进入DOS状态下,键入DEBUG (“ ”表示回车)即:

C:>DEBUG

则屏幕显示:

“—”号是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。

三.DEBUG的常用指令:

1.有关DEBUG命令的一些共同信息:

(1)DEBUG命令都是一个字母,后面跟一个或多个参数;

(2)命令可大写或小写;

(3)可以用+键来停止一个命令的执行返回DEBUG状态

(4)每个命令只有在回车后才有效;

(5)按+键可暂停移动显示,按任一键继续。

2.常用命令:

见课本P269—273

四.实验内容:

1. 启动DEBUG,进入DEBUG后,反复练习DEBUG的常用命令。

(1)用键盘,将DS:100H起八个内存地址单元置AAH,将DS:200H起八个内

存单元置FFH。

(2)用键盘,将AX,BX,CX,DX及DS,ES清0。

2.简单程序的执行:

(1)用E命令输入一段程序并执行,其源程序,目标代码及地址分配如下:

CS:0200 B233 MOV DL,33H ;将十六进制数‘33’存入DL中

:0202 B402 MOV AH,02H ;DOS2号功能调用

:0204 CD21 INT 21H ;屏幕显示DL内容

:0206 CD20 INT 20H ;结束

步骤:a.用E命令将目标代码写入内存CS:0200H~0207H

—E DS:200 B2,33,B4,02,CD,21,CD,20

b.用G命令从200H开始执行。

—G=CS:200

屏幕显示:

3

Program terminated normally.

c.用U命令反汇编

—U200 207

得到与书写一致的地址,目标代码及源程序。

若有错误,则进行调试,直致得到正确结论。

3.在汇编中若想对某一程序进行调试,可以使用debug进行单步T命令跟踪,但当

遇到调用int 21H中断输入指令时,如何进行输入以便继续跟踪调试程序?

解:遇到int 21h之类,用p即可完成中断的功能而不进入中断内部。单步调试多用

p, 除非你对某个子程感到怀疑或有兴趣了, 才用t命令进去看看, 对int类的指令也一样.

4.执行debug-a后,如果有一行输入错误,如何更改这一行?

解:

假如在Debug下进行如下输入:

-a

2129:0100 mov ax,200

2129:0103 mov bx,200

2129:0106 mov cx,200

2129:0109

此时,发现mov bx,200一句错误,应为mov bx,20,可以敲回车返回"-"状态,然后

输入:

-a 103

2129:0103movbx,20

5.在DEBUG下编写程序,在计算机屏幕上输出”ABC”

解:如下

C:DOCUME~1WANGXI~1>debug

-a 100

0AF4:0100 mov dl,41

0AF4:0102 mov ah,02

0AF4:0104 int 21

0AF4:0106 mov dl,42

0AF4:0108 int 21

0AF4:010A mov dl,43

0AF4:010C int 21

0AF4:010E int 20

0AF4:0110

-r

AX=0000 BX=0000

DI=0000

DS=0AF4 ES=0AF4

PO NC

CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000

SS=0AF4 CS=0AF4 IP=0100 NV UP EI PL NZ NA

0AF4:0100 B241 MOV DL,41

-r bx

BX 0000

:

-r cx

CX 0000

:10

-n c:

-w

Writing 00010 bytes

-q

C:DOCUME~1WANGXI~1>

'' is not recognized as an internal or external command,

operable program or batch file.

C:DOCUME~1WANGXI~1>cd

C:>cd masm

C:masm>

ABC

C:masm>

思考:BX和CX中的数值为何分别设置为0和10呢?

6. 在Debug下查看程序的内容并运行之。

解:

C:masm>debug

-n

-l

-u

0B3A:0100 B241 MOV DL,41

0B3A:0102 B402 MOV AH,02

0B3A:0104 CD21 INT 21

0B3A:0106 B242

0B3A:0108 CD21

0B3A:010A B243

0B3A:010C CD21

0B3A:010E CD20

-r

AX=0000 BX=0000

DI=0000

DS=0B3A ES=0B3A

PO NC

0B3A:0100 B241

MOV

INT

MOV

INT

INT

CX=0010

SS=0B3A

MOV

DL,42

21

DL,43

21

20

DX=0000 SP=FFFE

CS=0B3A IP=0100

DL,41

BP=0000 SI=0000

NV UP EI PL NZ NA

-g

ABC

Program terminated normally

练习

一、用A命令输入以下的程序,用单步命令T跟踪执行程序,并观察每一步的寄存器

内容和标志位的变化情况,并填写地址分配和目标代码。

地址分配 目标代码 源程序

____________ ____________ MOV AL,2

____________ ____________ PUSH BX

____________ ____________ MOV BL,AL

____________ ____________ DEC AL

____________ ____________ DEC AL

____________ ____________ DEC AL

____________ ____________ INC AL

____________ ____________ INC AL

____________ ____________ POP BX

____________ ____________ INT 20H

文件写盘操作:

(1)将上面的源程序用A命令写入CS:100起始的一片内存,再用U命令进行反汇

编,可以看出这段程序所占的内存长度。

(2)用R命令使BX,CX中包含该文件的字节数,其中BX为高位,CX为低位。

(3)—N 盘名:文件名.扩展名

-W

则将该文件写入指定磁盘中。若要检查文件是否确实写入,可用下面的读盘操作。

文件读盘操作:

—N 盘名:文件名.扩展名

—L

将文件读入CS:100起始的一片内存,再用U命令进行反汇编显示检查。

二.通过以上程序的调试和观察,试用汇编指令编一个简单的程序,将AAH,BBH,

CCH,DDH分别送AH,BH,CH,DH寄存器,用A命令输入,用T命令单步执行,观

察每一步的结果是否与预计结果相同。

三.对以下源程序进行调试,记录下每一条指令的目标代码,相应寄存器变化情况和

程序的最终执行结果。

源程序:MOV AL,30H

MOV BL,26H

ADD AL,BL

PUSH AX

POP DX

MOV AH,02H

INT 21H

INT 20H

8088常用指令练习

1、传送指令

1)用A命令在内存100H处键入下列内容:

MOV AX,1234

MOV BX,5678

XCHG AX,BX

MOV AH,35

MOV AL,48

MOV DX,75AB

XCHG AX,DX

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

3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注

意标志位有无变化。

2、加减法指令:

1)用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

2)用U命令检查键入的程序及对应的机器码。

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

思考:这次运行还是打入T,行不行?怎么办?用R命令检查一下IP的内容。注意T命令与IP

的关系。

3、带进位加减法:

1)用A命令在内存200H处键入下列内容,并用U命令检查:

MOV AH,12

MOV AL,84

MOV CH,56

MOV CL,78

ADD AL,CL

ADC AH,CH

MOV DH,A7

MOV DL,58

SUB DL,7F

SBB DH,34

2)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。

3)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运

4、BCD码加减法

行之。

1)内容:

MOV AL,58

ADD AL,25

DAA

2)要求:用A 命令键入,U命令检查,T命令逐条运行并记录有关寄存器及AF内容。

实验报告要求:

1、16进制数加减法手算结果及实验结果

2、8088常用指令练习部分的逐条运行记录,思考结果及自编程序运行记录 (列出自编

程序)。