微机实验

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

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

指导教师罗志祥

专业班级 ****** 姓名 ** 学号 **********

联系电话 *********

一、任务要求

1.掌握Keil环境的使用

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

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

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

有4个十六位无符号数,连续存放在20H开始的片上数据区中,低八位先存,高八位在后。要求:和存于R3(高八位)和R2(低八位),进位位存于R4。

二、设计思路

实验1中的两个小实验已经给出了源代码,不用设计,只要运行就可以,关键是后面的一个实验。

第二个实验中,把四个十六位按照顺序依次存放到20H至27H中,低位先存,高位后存,然后用R0,R1指向前两个数的低位,相加后,将和放入R2中,然后R0,R1指向高位,通过ADDC相加,和放入R3,同时将进位放入R4中。然后,再将R2,R3看做一个数,和第三个数还有第四个数相加,得到最后的结果。

三、资源分配

对任务2中四个数初值分别存于片内RAM中的20H~21H,22H~23H,24H~25H,26H~27H。运算结果和存于R3(高八位)和R2(低八位),进位位存于R4。

四、流程图

五、源代码(含文件头说明、语句行注释)1字节拆分、合并程序

File name: e421.asm

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

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

Designed by:

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: fill.asm

Date: 2011.8.20

Designed by: CDH

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 编写多个十六位数的加法程序

Date: 2016.9.22

Designed by: 张恒

Source used: R0,R1: 地址指针

20H~27H:BCD data

ORG 0000H

LJMP MAIN

ORG 0100H

MAIN: MOV SP,30H

MOV 20H,#11H ;赋值

MOV 21H,#12H

MOV 22H,#13H

MOV 23H,#14H

MOV 24H,#15H

MOV 25H,#16H

MOV 26H,#17H

MOV 27H,#18H

MOV R0,#20H ;将地址为20H的数赋给地址指针R0

MOV R1,#22H ;将地址为22H的数赋给地址指针R1 MOV A,@R1 ;将地址指针R1的值传递给A

ADD A,@R0 ;地址R0中的值与A中的值相加赋给A MOV R2,A ;将A赋给R2地址中

INC R0 ;R0的地址加一

INC R1 ;R1的地址加一

MOV A,@R0 ;将地址指针R0的值传递给A

ADDC A,@R1 ;地址R1中的值与A中的值还有cy相加赋给A MOV R3,A ;将A赋给R3地址中

CLR A ;清空A

ADDC A,#00H ;将进位赋给A

MOV R4,A ;将A赋给R4

INC R1 ;R1的地址加一

MOV A,@R1 ;将地址指针R1的值传递给A

ADD A,R2 ;地址R2中的值与A中的值相加赋给A

MOV R2,A ;将A赋给R2地址中

INC R1 ;R1的地址加一

MOV A,@R1 ;将地址指针R1的值传递给A

ADDC A,R3 ;地址R3中的值与A中的值还有cy相加赋给A MOV R3,A ;将A赋给R3地址中

CLR A ;清空A

ADDC A,#00H ;将进位赋给A

ADD A,R4 ;将A与R4地址中的值相加赋给A

MOV R4,A ;将A赋给R4

INC R1 ;R1的地址加一

MOV A,@R1 ;将地址指针R1的值传递给A

ADD A,R2 ;地址R2中的值与A中的值相加赋给A

MOV R2,A ;将A赋给R2地址中

INC R1 ;R1的地址加一

MOV A,@R1 ;将地址指针R1的值传递给A

ADDC A,R3 ;地址R3中的值与A中的值还有cy相加赋给A MOV R3,A ;将A赋给R3地址中

CLR A ;清空A

ADDC A,#00H ;将进位赋给A

ADD A,R4 ;将A与R4地址中的值相加赋给A

MOV R4,A ;将A赋给R4

相关文档
最新文档