汇编语言实验指导(4)

2019-06-17 11:11

2)用命令N AA将此程序命名为文件AA(文件名可任取)。

3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址) ,用R命令把BX设为:0000H,CX 设为文件长度。 4)用命令W 100将此程序存到AA命名的磁盘文件中。 5)用命令Q退出DEBUG。

6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。 若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。 7)用E命令在内存地址1000H处键入16个数字

8)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查

AX,BX的值是否符合你的预计值。

9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样, 若不一样,检查程序是否有错。

10)重复G J与T,再检查AX是否正确。 (J为断点地址) 11)用G命令使程序运行到结束,检查AX值是否正确。 2.用命令A汇编下列指令,判断指令正误并说明原因。

(1) LEA DI,[AX] (2) MOV DS,2010 (3) PUSH AL

(4) OUT 900,AL (5) MOV [BX],0

3.利用T,P,G命令,执行下列指令段,注意它们的不同之处。

(6) MOV DI,300

MOV SI,400 MOV CX,3 CLD

REP MOVSB INT 3

(7) MOV AH,2

MOV DL,41 INT 21 INT 3

4.程序: MOV DI,1000

MOV CX,8

15

MOV SI,2000 CLC

LOP: MOV ADC [DI],AL INC SI INC DI LOOP LOP INT 20

AL,[SI]

步骤:

1)用A命令键入此程序

2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。

3)用G命令运行此程序,并用D命令检查其结果(存放在哪里?),是否正确?

4)将INT 20H指令改为INT 3,有何区别?若这条指令不加,行不行?试 试。

5)请说明这个程序完成的功能是什么?

四、 实验说明

1. 初学者在使用DEBUG命令修改内存或执行程序时,由于多种原因,

出现死机是较经常的现象,可按RESET复位按钮,重新启动系统。 2. 用连续执行命令G执行程序时,注意给出执行的首地址,或查看当

前CS和IP值是否为要执行程序段的首地址,并注意查看执行的指令流程中有无返回DEBUG功能的程序段,如指令INT 20T或断点设置INT3,否则发出命令后,很容易出现死机,原因是如无程序段使系统返回命令接受状态,CPU将不断到内存取指令、执行指令,使作户失去对系统的控制,出现死机。为避免这种情况,可在用户程序段的最后加上一条INT 20H指令,或用断点方式执行。避免出现死机。

3. 关于任务2,在命令A下汇编各条指令,对于错误的指令,DEBUG

指令出其错误位置,对于正确的指令,将其汇编到相应内存,据此可判断指令正误,而具体原因需自己分析。

4. 关于任务3,用A命令汇编好后,用T,P,G命令分别执行,记录

指令执行前后各寄存器(包括标志寄存器各标志位值)、堆栈指针及堆栈内容变化情况,以及与指令有关内存单元的内容,总结T和P执行某些指令的不同之处及适用场合。 5. DEBUG下不支持符号地址,如任务1中的标号LOP和J 等,在命令

16

A下输入程序时,不输入标号(如next:),在用到标号的指令(如LOOP,JNZ等),在其后直接输入要跳转的目的地址。 6. 对向前跳转的指令,输入程序的过程如下: -A ↙

1270:0100 MOV CX,10 ↙ 1270:0103 MOV AL,0 ↙ 1270:0105 MOV BX,1000 ↙ 1270:0108 ADD AL,[BX] ↙ 1270:010A INC BX ↙ 1270:010B DEC CX

1270:010C JNZ 0108 ↙ 1270:101E MOV [BX],AL ↙ 1270:0110 INT 3 1270:0112 ↙

用目的地址0108代替标号LOP在LOOP指令中的位置,而在输入ADD AL,[BX]这条指令时,不输入标号LOP.

对向后跳转的指令,由于目的地址尚未确定,可先随意输入一个地址,若是条件转移指令,注意跳转范围应在-128~127之间,待程序输入完毕,目的地址明确后,再用命令A修改跳转指令。

如下程序段,功能是比较AX和CX中的两符号数,将较大的数放在AX和BX中,较小的数放在CX中。

CMP AX,CX JX continue XCHG AX,CX continue: MOV BX,AX

用命令A输入程序的过程如下: -A ↙

1270:0100 CMP AX,CX ↙ 1270:0102 JG 0102 ↙ 输入本条指令的地址0102代替标号continue

1270:0104 XCHG AX,CX ↙ 1270:0106 MOV BX,AX ↙ 1270:0108 ↙

-A 102↙ 修改跳转指令的目的地址

1270:0102 JG 0106 ↙ 输入目的地址0106 1270:0104 ↙

17

-U 1270:0100 L 0 A ↙ 用命令U查看程序,跳转

正确

1270:0100 39C8 CMP AX,CX 1270:0102 7F02 JG 0106 1270:0104 87C1 XCHG AX,CX 1270:0106 89C3 MOV BX,AX

五、 问题思考

1. 假设某内存单元的内容为CCH,试问该内容如看作一条指令、看

作无符号数、看作带符号数,那将分别表示什么?不查看教材中的指令系统代码,如何在DEBUG下知道CCH表示一条什么指令?

2.在指令MOV[BX],AX中,操作数[BX]的寻址方式是什么?在

DEBUG下执行完该指令后,如何查看执行结果?

3.可否随意在DEBUG提示符“-”后不带参数发出命令G?什么情

况下使用命令G时,可不用“=”给出执行的首地址?

4.分析出现死机的几种情况。如何理解死机现象?试从计算机的工

作原理进行解释。

六、 实验报告

1. 分析任务2中各条指令错误原因。

2.说明命令T和P的差别。 3.回答问题思考。

4. 针对实验目的认真做小结。

18

实验三 数据串传送和查表程序

一、实验目的

1、堆栈。堆栈指示器SP和堆栈操作指令PUSH。POP。 2、段寄存器和物理地址计算。 3、查表法和查表指令XLAT。

4、数据串传送程序和数据串传送指令MOVS。STOS及重复前辍REP。 5、循环指令ROL。逻辑与指令AND和清方向位指令CLD。 6、伪操作指令DB。

二、实验准备

1.编写实验任务要求的程序 2.学习一下调试方法

利用查表方法把DX的内容(16进制数)转换成ASCII码:

1)、用A命令键入下列程序:

MOV BX,1000 MOV DI,2000 MOV CX,4

LOP: PUSH CX

MOV CL,4 ROL DX,CL POP CX MOV AL,DL AND AL,OF XLAT CLD STOSB

19


汇编语言实验指导(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:生态学理念在室内装潢设计中的应用

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: