ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:527.27KB ,
资源ID:28950713      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28950713.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Keil 的使用与汇编语言上机操作 实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Keil 的使用与汇编语言上机操作 实验报告.docx

1、Keil 的使用与汇编语言上机操作 实验报告实验名称 Keil 的使用与汇编语言上机操作 指导教师 罗志祥 专业班级 光电1406 姓名 段昳晖 学号 U2014* 联系电话 137* 1、任务要求1.掌握Keil环境的使用 1)字节拆分、合并:调试e421.asm程序, 观察相关寄存器和单元的内容。 2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。2. 编写多个十六位数的加法程序有4个十六位无符号数,连续存放在20H开始的片上数据区中,低八位先存,高八位在后。要求:和存于R3(高八位)和R2(低八位),进位位存于R4.2、设计思路1.掌握Keil环境的使用1)字节拆分、

2、合并利用汇编语言中的XCHD和SWAP两个语句来实现将八位二进制数拆分为两个四位二进制数并分别存储于不同的存储空间的功能,BCD码与30H相或(加上30H)得到ASCII码。 将两个ASCII码和0FH相与(高四位清零)得到BCD码,利用SWAP语句将高位数放至高四位,将高位数和低位数相或可实现字节的合并。2)数据块填充将R0用作计数器,DPTR用作片外数据指针,A作为原始数据来源,依顺序在片外的存储单元内容填充数据。利用循环语句来减少程序长度,并控制填充单元个数为片外100H个。利用RO的进位实现,当且仅当RO=00H时,结束循环赋值过程,此时R0已经经历了从00H-0FFH的过程,即计数周

3、期为100。同时赋值循环也历经了一百次,完成了将片外RAM 7000H-70FFH单元按数据依次递增规律的填充。2.多个十六位数的加法程序以2个十六位无符号数相加为基础,将输入的4个无符号数(以a、b、c、d代表),两两相加,所得的2个和,再作为加数,求和,得到4个数的和。其中需要注意的是进位的处理。四数求和进位,不仅有两和数相加产出的进位还要加上产生两和数时的进位。其中2个十六位无符号数相加的原理为,先对两数低位求和,提取出其进位,加到两数高位和中,并将高位求和进位,即两数求和进位保存下来。3、资源分配1.掌握Keil环境的使用1)字节拆分、合并 一字节BCD码存于 30H:; 两字节ASC

4、II码存于 31H, 32H 2)数据块填充RO:计数器 DPTR: 片外数据指针 7000H-70FFH,数据填充单元2.多个十六位数的加法程序1)加数存储: (1)加数a:低8位存于20H;高8位存于21H (2)加数b:低8位存于22H;高8位存于23H (3)加数c:低8位存于24H;高8位存于25H (4)加数d:低8位存于26H;高8位存于27H2)和储存 (1)a、b低位相加和,存于40H;a、b高位相加和,存于41H (2)c、d低位相加和,存于50H;c、d低位相加和,存于51H (3)4数低位相加和,存于R2;4数高位相加和,存于R33)进位数储存 (1)a、b相加进位,存

5、于42H (2)c、d相加进位,存于52H (3)4数相加进位,存于R44、流程图 1.掌握Keil环境的使用1)字节拆分、合并:调试e421.asm程序, 观察相关寄存器和单元的内容。2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。2. 编写多个十六位数的加法程序5、源代码 (含文件头说明、语句行注释)1.掌握Keil环境的使用1)字节拆分、合并File name: e421.asmDescription: 1字节BCD码转换为2字节ASCII 2字节ASCII码转化为1字节BCD码Date: Designed by: Source used: 30H: BCD dat

6、a 31H, 32H:ASCII data 31H, 32H -33H ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV SP, #40H ;赋堆栈指针 MOV 30H, #96H ;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 S

7、WAP A MOV 33H, A ;结果存于33H单元MOV A, 32H ;从32H单元取值 ANL A, #0FH ;转换为BCD ORL 33H, A ;合并字节 HERE: SJMP HERE ;踏步 END 2)数据块填充File name: fill.asm Date: 2011.8.20Designed by: CDHSource used: R0: 计数器 DPTR: 片外数据指针 ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV SP,#40HFILL: CLR A ;A寄存器清零MOV R0, #00H ;设循环计数器 MOV DPTR, #70

8、00H ;设数据指针FILL1: MOVX DPTR, A ;传送到片外RAM INC A ;A内容加1INC DPTR ;修改数据指针 INC R0 ;修改循环计数器 CJNE R0, #00H, FILL1 ;判断是否结束,RO=00H,继续执行,否则跳转至FILL1HERE: SJMP HERE ;原地踏步 END 2. 编写多个十六位数的加法程序File name: add.asmDescription: 4个16位无符号数的加法,输出运算结果Date: 2016.9.23Designed by:DYHSource used: R0、R1:地址指针R2:存放4数和的低位R3:存放4数和

9、的高位R4:存放4数和的进位20H-27H: 存放a、b、c、d 加数 40H:存放a、b低位相加和41H:存放a、b高位相加和42H:存放a、b相加进位50H:存放c、d低位相加和51H:存放c、d高位位相加和52H:存放c、d相加进位ORG 0000H LJMP MAIN ORG 0100H MAIN: CLR C ;abcd,加数赋值 MOV 20H,#01H ;a_min MOV 21H,#11H ;a_max MOV 22H,#02H ;b_min MOV 23H,#22H ;b_max MOV 24H,#03H ;c_min MOV 25H,#33H ;c_max MOV 26H,

10、#04H ;d_min MOV 27H,#44H ;d_max ;ab求和 MOV R0,#20H ;地址指针赋值,指向ab低位 MOV R1,#22H MOV A,R0 ADD A,R1 MOV 40H,A ;低位和存于40H INC R0 ;地址+1.指向ab高位 INC R1 MOV A,R0 ADDC A,#00H ;低位求和进位 ADD A,R1 ;求高位和 MOV 41H,A ;ab高位和存于41H CLR A ADDC A,#00H ;ab求和进位 MOV 42H, ;ab求和进位存于42H ;cd求和 MOV R0,#24H ;地址指针赋值,指向cd低位 MOV R1,#26H

11、 MOV A,R0 ADD A,R1 MOV 50H,A ;低位和存于50H INC R0 ;地址+1.指向cd高位 INC R1 MOV A,R0 ADDC A,#00H ;低位求和进位 ADD A,R1 ;求cd高位和 MOV 51H,A ;cd高位和存于51H CLR A ADDC A,#00H ;cd求和进位 MOV 52H,A ;cd求和进位存于52H ;abcd求和 MOV R0,#40H ;地址指针赋值,指向ab和及cd和低位 MOV R1,#50H MOV A,R0 ADD A,R1 MOV R2,A ;低位和存于R2 INC R0 ;地址+1.指向ab的和以及cd的和 高位

12、INC R1 MOV A,R0 ADDC A,#00H ;低位求和进位 ADD A,R1 ;求高位和 MOV R3,A ;abcd高位和存于R3 ;求4数求和的进位 CLR A ADDC A,#00H ;和数高位求和进位 ADD A,42H; ADD A,52H; ;加上分开计算ab和、cd和时的进位 MOV R4,A ;abcd求和进位存于R4 ;最终结果为adder=R4,R3,R2,进位为R4 HERE: SJMP HERE ;原地踏步 END 6、程序测试方法与结果1.掌握Keil环境的使用1)字节拆分、合并(以96H,单步测试)可见拆分后的结果已经存放在31H和32H合并后结果存放在

13、33H2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。程序执行后的片外存储器的内容程序执行后的寄存器状态2. 编写多个十六位数的加法程序考虑到本程序的目的是求4个16位无符号数的和,考虑到进位的问题,于是选取了4组数据测试程序的正确性1.无进位观察42H以及52H,均无进位结果为AA0AH,无进位,经验证正确2. 2数求和无进位,4数求和有进位观察42H以及52H,ab求和无进位,cd求和无进位结果为BA0AH,无进位,经验证正确3.2数求和有进位,4数求和有进位观察42H以及52H,ab低位求和有进位,cd求和有进位此时4数求和无进位,经检查调试发现了问题(调试前)(调

14、试后)调试后结果如下结果为027342H,有进位,经验证结果正确思考题1 怎样查看工作寄存器、SFR、片内RAM、片外RAM及程序代码空间内容?Disassembly 窗口有何作用?选择Debug下的Start/Stop Debug Session,在界面的左侧会出先程序代码的空间地址内容,点选register,查看工作寄存器内容。在debug模式下,点击View菜单下的Memory Window命令或对应的按钮,就会显示或隐藏存储器窗口。在4个显示区上边的“Address”栏输入不同类型的地址,可以观察不同的存储区域。在Address栏输入D:xx,可观察片内RAM直接寻址的data区;在A

15、ddress栏输入I:xx,可观察片内RAM间接寻址的idata区;在Address栏输入X:xxxx,可观察片外RAM的xdata区;在Address栏输入C:xxxx,可观察程序存储器ROM code区。2 字节拆分、合并还有哪些方法,举一例说明。字节拆分可以利用与运算ANL,例如将20H单元中的数据从中间拆分,低字节存于21H,高字节存于22H,程序如下: MOV A,20H ANL A,#0FH MOV 21H,A MOV A,20H MOV 22H,A 合并字节可以利用或运算ORL SWAP A MOV A,21H ORL A,22H MOV 30H,A3. 若按递减1规律填充数据块

16、,应如何修改程序?原程序 ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV SP,#40HFILL: CLR A ;A寄存器清零MOV R0, #00H ;设循环计数器 MOV DPTR, #7000H ;设数据指针FILL1: MOVX DPTR, A ;传送到片外RAM INC A ;A内容加1INC DPTR ;修改数据指针 INC R0 ;修改循环计数器 CJNE R0, #00H, FILL1 ;判断是否结束,RO=00H,继续执行,否则跳转至FILL1HERE: SJMP HERE ;原地踏步 END 修改后ORG 0000H LJMP MAIN ORG

17、 0100HMAIN: MOV SP,#40HFILL: CLR A ;A寄存器清零MOV R0, #00H ;设循环计数器 MOV DPTR, #70FFH ;设数据指针FILL1: MOVX DPTR, A ;传送到片外RAM INC A ;A内容加1DEC DPTR ;修改数据指针 INC R0 ;修改循环计数器 CJNE R0, #00H, FILL1 ;判断是否结束,RO=00H,继续执行,否则跳转至FILL1HERE: SJMP HERE ;原地踏步 END 4. 若从7010H单元开始,连续填充20个字节,应该如何修改程序?原程序 ORG 0000H LJMP MAIN ORG

18、0100HMAIN: MOV SP,#40HFILL: CLR A ;A寄存器清零MOV R0, #00H ;设循环计数器 MOV DPTR, #7000H ;设数据指针FILL1: MOVX DPTR, A ;传送到片外RAM INC A ;A内容加1INC DPTR ;修改数据指针 INC R0 ;修改循环计数器 CJNE R0, #00H, FILL1 ;判断是否结束,RO=00H,继续执行,否则跳转至FILL1HERE: SJMP HERE ;原地踏步 END 修改后 ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV SP,#40HFILL: CLR A ;

19、A寄存器清零MOV R0, #0ECH ;设循环计数器 MOV DPTR, #7010H ;设数据指针FILL1: MOVX DPTR, A ;传送到片外RAM INC A ;A内容加1INC DPTR ;修改数据指针 INC R0 ;修改循环计数器 CJNE R0, #00H, FILL1 ;判断是否结束,RO=00H,继续执行,否则跳转至FILL1HERE: SJMP HERE ;原地踏步 END 5. 若完成双字节BCD码加法,应如何修改程序? 可以运用二十进制调整指令,在ADD、ADDC后加上DA,进行十进制修正。本人承诺:本报告内容真实,无伪造数据,无抄袭他人成果。本人完全了解学校相关规定,如若违反,愿意承担其后果。签字: 2016 年 9 月 25 日 其它说明:1.标题:黑体,小四号2. 正文:宋体,五号,1.5倍行距3.流程图使用 SmartDraw7 或Visio软件绘制4.不要加封面

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1