微机原理及汇编语言程序设计实验指导书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机原理及汇编语言

程序设计

计算机实验中心

目录

实验一D E B U G的使用 (3)

实验二数制转换程序 (8)

实验三数组排序程序 (10)

实验四数据的输入与输出程序 (11)

实验五子程序设计 (12)

实验六宏调用程序设计 (14)

实验一 DEBUG的使用

【实验目的】

1.学习使用DEBUG调试程序的各种命令。

2.掌握8088/8086指令系统---数据传送指令、算术指令。

3.掌握用DEBUG调试程序的方法。

4.掌握8088/8086 CPU寄存器的用途和存储器组织及它们之间的关系。

5.掌握内存操作数及寻址方法。

6.掌握汇编语言伪操作:BYTE PTR,WORD PTR。

7.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。

8.掌握数据传送、算术运算、BCD码调整和循环指令的用法,掌握字符显示的方法。

【实验性质】

验证性实验(学时数:2H)

【实验内容】

一、DEBUG 命令的使用

1.敲 DEBUG 进入 DEBUG 环境,显示提示符 '_ '。

2.用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。

3.用命令 E100 30 31 32 …… 3F 将30H~3FH写入地址为100H开始的内存单元

中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?

4.用命令 F100 L0F 'A' 将'A'的ASCII码填入内存,用D命令查看结果。

5.用命令 F110 11F 41 将41H 填入内存,用D命令观察结果并比较。

6.用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF

的内容。

7.用R命令将AX,BX内容改写为1234H及5678H。

8.用H命令检查下列各组16进制数加减结果并和你的手算结果比较:

(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH

二、8088/8086常用指令练习

1.传送指令

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

MOV AX,1234

MOV BX,5678

XCHG AX,BX

MOV AH,34

MOV AL,56

MOV CX,75AB

XCHG AX,CX

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

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

2.加减法指令:

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

MOV AH,34

MOV AL,2E

ADD AL,AH

SUB AL,78

MOV CX,1234

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命令在内存300H处键入下列内容,并用U命令检查:

MOV AH,12

MOV AL,89

MOV CH,56

MOV CL,98

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)用A命令在内存400H处键入下列内容,并用U命令检查:

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

2)用T命令逐条运行这些指令,每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存

单元的内容并注明是什么寻址方式。

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

思考题: 有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。

四、DEBUG环境下汇编运行程序方法

用A命令汇编程序,编程完成将DS:1000开始的10个字节的内存单元的内容相加,并把相加结果存放在DS:100A 内存单元中,用DEBUG调试运行该程序,并察看运行结果。

内容:

MOV CX,0AH

MOV AL,0

MOV BX,1000

LL: ADD AL,[BX]

INC BX

DEC CX

JNZ LL

MOV [BX],AL

INT 3

步骤:

1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LL的实际地址,在键入JNZ指令时LL

用实际地址值代替。

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

3)用E1000 01 02 03 04 05 06 07 08 09 0A将1000H开始的前10个内存单元的内容修改为01,02,

03,04,05……0A,用D命令查看修改结果。

4)用T命令逐条运行上述小程序指令,检查并记录有关寄存器、存储单元内容及ZF情况。

5)用F2000 L0A 02 03 04 05 ……0B 将1000H开始的10 个内存单元的内容修改为02,03,04,05……

0B。用D命令查看修改结果。

6)用G=100 全速运行上述小程序,用D1000 100F 查看运行结果。

思考题:

可否随意在DEBUG提示符“-”后不带参数发出命令G?什么情况下使用命令G时,可不用“=”给出执行的首地址?

五、两个多位十进制数相加

要求:将下面程序在汇编平台下,完整地进行汇编、连接、运行,然后用DEBUG软件调入可执行文件到内存,用反汇编命令查看实际程序及数据区内容,用t命令逐条执行,以观察各寄存器及数据区内存的数据变化情况,然后使用p命令和g命令执行,以观察执行过程有何特点。

将两个5位十进制数相加,要求被加数(本题选47193)和加数(本题选28056)均以ASCII码形式各自顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回以DATA3为首的5个内存单元中(低位在前),并显示相加的结果。

实验程序和结果如下:

DATA SEGMENT

DATA1 DB 33H,39H,31H,37H,34H ;存放被加数47193,ASCII码形式,低位在前

DATA2 DB 36H,35H,30H,38H,32H ;存放加数28056,ASCII码形式,低位在前

DATA3 DB 5 DUP(?) ;留出5个存放结果的单元

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV CX,5 ;循环次数置5,5个位要相加5次

MOV SI,0 ;SI放地址位移量,每个数的第一字节地址位移量为0

CLC ;CF清0,防止第1个字节相加时ADC指令多加CF中可能的1

NEXT: MOV AL,DATA1[SI] ;取被加数一个字节送AL,DATA1偏移地址+SI为有效地址ADC AL,DATA2[SI] ;AL+加数对应字节+CF(低位相加时可能的进位)结果送AL

相关文档
最新文档