微机实验一华科大

上传人:m**** 文档编号:508297090 上传时间:2023-01-03 格式:DOC 页数:7 大小:31KB
返回 下载 相关 举报
微机实验一华科大_第1页
第1页 / 共7页
微机实验一华科大_第2页
第2页 / 共7页
微机实验一华科大_第3页
第3页 / 共7页
微机实验一华科大_第4页
第4页 / 共7页
微机实验一华科大_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《微机实验一华科大》由会员分享,可在线阅读,更多相关《微机实验一华科大(7页珍藏版)》请在金锄头文库上搜索。

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

2、,实验者只需在Keil软件上进行运行调试,在此不一一赘述,仅将程序调试结果截图附录余下。字节拆分、合并程序File name: e421.asmDescription: 1字节BCD码转换为2字节ASCII 2字节ASCII码转化为1字节BCD码Date: Designed by: Source used: 30H: BCD data 31H, 32H:ASCII data 31H, 32H -33H ORG 0000HLJMP MAINORG 0100HMAIN: MOV SP, #40H ;赋堆栈指针 MOV 30H, #49H ;30H单元赋值 MOV R0, #32H ;R0指针赋值

3、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 数据块填充程序:将片外RAM 7000H-70FFH

4、单元按一定规律填充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 R0 ;修改循环计数器 CJNE R0, #00H, FILL1 ;判断是

5、否结束HERE: SJMP HERE ;原地踏步 END 下面对于实验要求2(编写两个十六位数的加法程序。)叙述我的设计思路。要编写两个十六位数的加法程序:1. 在低位相加时,直接采用指令ADD然后存数即可。2. 在处理高位时,由于存在进位的可能性,因此在相加时应采用指令ADDC将被加数、加数、以及低位到高位的进位全部相加然后存数。3. 最后应该考虑到两个十六位数相加,其和可能超出十六位数所能表示的范围,故应另分配一个地址单元存放最高位的数,然后再执行相加操作。三、资源分配根据此程序的要求。两个十六位无符号数,分别存放在从20H和30H开始的数据区中;和存于R3(高4八位)和R4(低八位),进

6、位位存于R2。开始四、 流程图 赋值存数低位相加,其和存入R4高位相加,其和存入R3低位相加所产生进位Cy存入R2结束五、 源代码 (含文件头说明、资源使用说明、语句行注释)File name: test.asmDescription: 两个十六位数的加法程序Date: 2013/9/27Designed by: liusaSource used: 20H: 加数A的低位 21H: 加数A的高位 30H: 加数B的低位 31H: 加数B的高位 R4: 和的低位 R3: 和的高位 R2: 和的进位 ORG 0000H CLR C ;将进位位清零 MOV 20H,#10H ;存数操作 MOV 21

7、H,#2AH MOV 30H,#21HMOV 31H,#00H MOV R0,20H ;将A中的低位存入R0中 MOV A,30H ;将B中的低位存入A累加器中ADD A,R0 ;将低位相加MOV R4,A ;其和存入R4中CLR A ;对累加器A清零MOV R0,21H ;将A中的高位存入R0中 MOV A,31H ;将B中的高位存入A累加器中ADDC A,R0 ;将高位以及进位位相加MOV R3,A ;其和存入R4中CLR A ;对累加器A清零ADDC A,#0 ;将进位存入AMOV R2,A ;将进位存入R2SJMP $ END相应程序运行结果截图如下:六、程序测试方法与结果、软件性能分

8、析1.手动输入改变两个加数的值,运行程序后均可得到正确的和。2.对于不同的加数,分别在调试过程中观察A,R4,R3,R2的值,程序显示数值均与预期结果相同。因此,该程序的源代码是合格的。七、心得与体会1.本次实验,在执行了安装Keil软件、调试已知程序、编写程序等操作后,对Keil的运行环境有了一定认知,能够编写一些简单的小程序,并进行相应的调试。2.在自己实际操作后对老师上课所调试程序过程也增加熟悉度,不会像之前一样产生茫然无措之感。3.在实验操作学习过程中也加深了我对BCD码、ASCII码、寄存器、堆栈、数据指针等基本概念和汇编语言各条指令的理解,为后续程序编制和调试打下基础。4.此次上机

9、实验调试简单程序,所以拥有清晰条理,过程十分顺利,使我对汇编语产生了兴趣,对之后的实验和学习也有了信心。附 思考题1.怎样查看工作寄存器、SFR、片内RAM、片外RAM及程序代码空间内容?Disassembly 窗口有何作用?答:电击调试后,在工作窗左侧view栏内的registers window可查看工作寄存器R0到R7,特殊寄存器SFR和PSW各位的空间内容;在右下角memory1中输入D+片内地址,即可查看片内RAM的空间内容;输入X+片外地址即可查看片外RAM的空间内容。Disassembly窗口的作用是显示程序计数器PC指向的地址。2. 字节拆分、合并还有哪些方法,举一例说明。 O

10、RG 0000H LJMP MAINORG 0100H MAIN: MOV A,R2 ANL A,#0F0H SWAP A MOV R0,A MOV A,R2 ANL A,#0FH MOV R1,A 合并 MOV A,R1 ADD A,#0F0H MOV R1,A MOV A,R0 SWAP A ADD A,#0FH ANL A,R1 3. 若按递减1规律填充数据块,应如何修改程序? ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV SP,#40H FILL: MOV A, #0FFH ;给累加器A赋初值 MOV R0, #00H ;设循环计数器 MOV DPTR, #7020H ;设数据指针FILL1: MOVX DPTR, A ;传送到片外RAM DEC A ;A内容减1 INC DPTR ;修改数据指针 INC R0 :修改循环计数器 CJNE R0, FILL1 ;判断是否结束HERE: SJMP HERE ;原地踏步 END 4. 若从7020H单元开始,连续填充10个字节,应该如何修改程序?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号