微机实验报告(1)

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

《微机实验》报告

实验名称 KeilC的使用与汇编语言上机操作

指导教师刘小英

专业班级中法1201 姓名肖洋学号 U3 联系电话

一、任务要求

1.掌握KeilC环境的使用

1)字节拆分、合并:调试程序,观察相关寄存器和单元的内容。

2)数据块填充:调试程序,观察相关寄存器和单元的内容。

2. 编写两个十六位数的加法程序。

有两个十六位无符号数,分别存放在从20H和30H开始的数据区中,低八位先存,高八

位在后,和存于R3(高八位)和R4(低八位),进位位存于R2。

二、设计思路

1.字节拆分、合并程序:利用汇编语言中的 XCHD 和 SWAP 两个语句来实现将八位二进制

数拆分为两个四位二进制数并分别存储于不同的存储空间的功能,BCD 码与 30H 相或(加

上 30H)得到 ASCII 码。将两个 ASCII 码和 0FH 相与(高四位清零)得到 BCD 码,利

用 SWAP 语句将高位数放至高四位,将高位数和低位数相或可实现字节的合并。

2.数据块填充程序:将 R0 用作计数器,DPTR 用作片外数据指针,A 作为原始数据来源,

依顺序在片外的存储单元内容填充数据。利用循环语句来减少程序长度,并控制填充单

元个数为片外 100H 个。(通过 R0 的进位控制)

3.两个十六位数加法程序:把第一个十六位无符号数的地八位和高八位分别存于 20H 和

21H 中,把第二个十六位无符号数的地八位和高八位分别存于 30H 和 31H 中,对 20H 和

30H 中的两个低八位进行 ADD 加法操作,结果存于 R4 中;然后对 21H 和 31H 中的两

个高八位进行 ADDC 带进位的加法操作,结果存于 R3 中.然后将累加器 A 清零,并和#00H

进行 ADDC 带进位的加法操作,结果产生进位数并存于 R2 中,程序结束。

三、资源分配

1. 字节拆分、合并程序:

片内 30H 单位存放原 BCD 码,31H 和 32H 存放拆分后的两个 ASCII 码,33H 存放合并后的 BCD 码。

2.数据块填充程序:

R0 作为计数器,DPTR 作为数据指针,片外RAM空间从 7000H 开始填充。

3.两个十六位数加法程序:

20H,21H: 第一个数的低八位和高八位 30H,31H:第二个数的低八位和高八位 R4:加法结果的低八位 R3:加法结果的高八位 R2:加法结果的进位

四、流程图

1.字节拆分、合并程序

2.数据块填充程序

3.两个十六进制数相加程序

五、源代码 (含文件头说明、语句行注释)

1.字节拆分、合并程序

File name:

Description: 1字节BCD 码转换为2字节ASCII

2字节ASCII 码转化为1字节BCD 码

Source used: 30H: BCD data

31H, 32H :ASCII data

31H, 32H ->33H

ORG 0000H

LJMP MAIN

ORG 0100H MAIN: MOV SP, #40H ;赋堆栈指针

MOV 30H, #49H ;30H单元赋值

MOV R0, #32H ;R0指针赋值

MOV @R0, #0 ;32H单元清零

MOV A, 30H

XCHD A, @R0 ;拆分字节

ORL 32H, #30H ;转换为ASCII

SWAP A

ORL A, #30H ;转换为ASCII

MOV 31H, A ;结果存于31H单元

MOV A, 31H ;从31H单元取值

ANL A, #0FH ;转换为BCD

SWAP A

MOV 33H, A ;结果存于33H单元

MOV A, 32H ;从32H单元取值 ANL A, #0FH ;转换为BCD

ORL 33H, A ;合并字节

HERE: SJMP HERE ;踏步

END

2.数据块填充程序:将片外RAM 7000H-70FFH单元按一定规律填充File name:

Source used: R0: 计数器

DPTR: 片外数据指针

ORG 0000H

LJMP MAIN

ORG 0100H

MAIN: MOV SP,#40H

FILL: CLR A ;A寄存器清零

MOV R0, #00H ;设循环计数器

MOV DPTR, #7000H ;设数据指针

FILL1: MOVX @DPTR, A ;传送到片外RAM

INC A ;A内容加1

INC DPTR ;修改数据指针

INC R0 ;修改循环计数器

CJNE R0, #00H, FILL1 ;判断是否结束HERE: SJMP HERE ;原地踏步

END

3.两个十六位数加法程序:

File name:

Description:

Source used:

ORG 0000H

LJMP MAIN

ORG 0100H

MAIN:

CLR C ;进位清零

MOV 20H,#11H ;赋值

MOV 21H,#19H

MOV 30H,#90H

MOV 31H,#09H

MOV R0,#20H ;置数据指针

MOV R1,#30H

MOV A,@R0 ;取第一个数低位

ADD A,@R1 ;两位数低位相加

MOV R4,A ;存“和”低位

ADDC A,#00H ;处理地位相加进位

INC R0 ;修改指针

INC R1

MOV A,@R0 ;取第一个数高位

相关文档
最新文档