KeilC的使用与汇编语言上机操作(共9页)_第1页
KeilC的使用与汇编语言上机操作(共9页)_第2页
KeilC的使用与汇编语言上机操作(共9页)_第3页
KeilC的使用与汇编语言上机操作(共9页)_第4页
KeilC的使用与汇编语言上机操作(共9页)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微机实验报告实验名称 KeilC的使用与汇编语言上机操作 指导教师 专业班级 姓名 学号 序号 无 联系方式 1、 任务要求1.掌握KeilC环境的使用 1)字节拆分、合并:调试e421.asm程序, 观察相关寄存器和单元的内容。 2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。 2. 编写两个十六位数的加法程序。有两个十六位无符号数,分别存放在从20H和30H开始的数据区中,低八位先存,高八位在后,和存于R3(高八位)和R4(低八位),进位位存于R2。2、 设计思路 1.字节拆分、合并程序: 利用汇编语言中的XCHD和SWAP两个语句来实现将八位二进制数拆分为两个四位二

2、进制数并分别存储于不同的存储空间的功能,BCD码与30H相或(加上30H)得到ASCII码。将两个ASCII码和0FH相与(高四位清零)得到BCD码,利用SWAP语句将高位数放至高四位,将高位数和低位数相或可实现字节的合并。2.数据块填充程序: 将R0用作计数器,DPTR用作片外数据指针,A作为原始数据来源,依顺序在片外的存储单元内容填充数据。利用循环语句来减少程序长度,并控制填充单元个数为片外100H个。(通过R0的进位控制)3. 两个十六位数加法程序: 把第一个十六位无符号数的地八位和高八位分别存于20H和21H中,把第二个十六位无符号数的地八位和高八位分别存于30H和31H中,对20H和

3、30H中的两个低八位进行ADD加法操作,结果存于R4中;然后对21H和31H中的两个高八位进行ADDC带进位的加法操作,结果存于R3中.然后讲累加器A清零,并和#00H进行ADDC带进位的加法操作,结果产生进位数并存于R2中,程序结束。 三、资源分配1. 字节拆分、合并程序:片内30H单位存放原BCD码,31H和32H存放拆分后的两个ASCII码,33H存放合并后的BCD码。2. 数据块填充程序:R0作为计数器,DPTR作为数据指针,片外空间从7000H开始填充。 3. 两个十六位数加法程序: 20H,21H: 第一个数的低八位和高八位 30H,31H:第二个数的低八位和高八位 R4:加法结果

4、的低八位 R3:加法结果的高八位 R2:加法结果的进位4、 流程图 2.数据块填充程序 1.字节拆分,合并程序 3.两个16位数加法程序五、源代码 (含文件头说明、资源使用说明、语句行注释)1.字节拆分、合并程序File name: e421.asmDescription: 1字节BCD码转换为2字节ASCII 2字节ASCII码转化为1字节BCD码Source used: 30H: BCD data 31H, 32H:ASCII data 31H, 32H -33H ORG 0000HLJMP MAINORG 0100HMAIN: MOV SP, #40H ;赋堆栈指针 MOV 30H, #

5、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

6、;踏步 END 2.数据块填充程序:将片外RAM 7000H-70FFH单元按一定规律填充File name: fill.asm Date: 2011.8.20Designed by: CDHSource used: R0: 计数器 DPTR: 片外数据指针ORG 0000HLJMP 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 R

7、0 ;修改循环计数器 CJNE R0, #00H, FILL1 ;判断是否结束HERE: SJMP HERE ;原地踏步 END 3.两个十六位数加法程序:File name:test1,asmDate:2012.9.26Designed by lixueningSource used: ORG 0000HLJMP MAINORG 0100HMAIN: MOV SP, #40H ;赋堆栈指针 MOV 20H, #0F1H MOV 21H, #92H ;赋值第一个无符号十六位数 MOV 30H, #0D9H MOV 31H, #E0H ;赋值第二个无符号十六位数 MOV A, 20H ADD A

8、, 30H ;低八位相加 MOV R4, A ;结果存放于R4中 MOV A, 21H ADDC A, 31H ;高八位相加(带进位) MOV R3, A ;结果存放于R3中 CLR A ;累加器A清零 ADDC A, #00H ;A与#00H相加(带进位) MOV R2, A ;进位结果存于R2中 SJMP $ END 六、程序测试方法与结果、软件性能分析1.字节拆分、合并程序:测试方法:单步调试观察寄存器变量和片内RAM的存储空间。结果如右图:性能分析:该程序能很方便地实现将一个BCD码拆分为两个ASCII码以及将两个ASCII码合并成一个BCD码的功能。2.数据块填充程序:测试方法:利用

9、程序的运行和停止控制来观察最终的寄存器变量和片内RAM的存储空间。结果如图:性能分析:从寄存器变量DPTR最后的取值(7100H)来看,该程序能实现片外RAM从7000H到70FFH的数据填充。程序中利用R0从00H到FFH的计数中产生的进位很巧妙地控制了循环的次数。3. 两个十六位数加法程序测试方法:单步调试观察寄存器变量值的改变。结果如下:性能分析:设定的两个十六位数分别为92F1和E0D9,并且设置了最高位的进位,通过计算易知程序最后的结果完全正确。思考题:1 怎样查看工作寄存器、SFR、片内RAM、片外RAM及程序代码空间内容?Disassembly 窗口有何作用? 选择Debug下的

10、Start/Stop Debug Session,在界面的左侧会出先程序代码的空间地址内容 Disassembly窗口可以显示编译之后的汇编代码2 字节拆分、合并还有哪些方法,举一例说明。 字节拆分可以利用与运算ANL,例如将20H单元中的数据从中间拆分,低字节存于21H,高字节存于22H,程序如下:MOV A,20HANL A,#0FHMOV 21H,AMOV A,20HMOV 22H,A合并字节可以利用或运算ORLSWAP AMOV A,21HORL A,22HMOV 30H,A3. 若按递减1规律填充数据块,应如何修改程序? 在原程序中修改,从MAIN开始算第一行, 第三行 改为 MOV R0,#FFH 第四行 改为 MOV DPTR,#70FFH 第六行 改为 DEC A 第七行 改为 DEC DPTR 第八行 改为 DEC R0 第九行 改为 CJNE R0,#FFH,FILL1 4. 若从7010H单元开始,连续填充20个字节,应该如何修改程序? MAIN: MOV SP,#40H FILL: CLR A ;A计数器清零 MOV R0,#00H ;设循环计数器 MOV DPTR,#7010H ;设数据指针 FILL1: MOVX D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论