微机实验报告_第1页
微机实验报告_第2页
微机实验报告_第3页
微机实验报告_第4页
微机实验报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、 实验名称 Keil的使用与汇编语言上机操作 成 绩 指导教师 专业班级 姓 名 学 号 联系电话 一、实验目的熟悉Keil环境,通过在Keil环境下调试字节拆分、合并程序、数据块清零程序、加法程序,掌握汇编语言程序的调试方法,加深对BCD码、ASCII码、堆栈、寄存器、数据指针、汇编语言指令、机器码等基本概念的理解,为后续程序编制和调试打下基础。二、任务要求 1. 掌握Keil环境的使用 1)字节拆分、合并:调试e421.asm程序, 观察相关寄存器和单元的内容。2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。2. 编写多个十六位数的加法程序有4个十六位无符号数,连续存

2、放在20H开始的片上数据区中,低八位先存,高八位在后。要求:和存于R3(高八位)和R2(低八位),进位位存于R4。三、实验过程1.字节的拆分,合并程序的调试(程序已给出,只需做出调试工作) 1)设计要求与资源分配如下: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 ->33H2)源代码如下:ORG 0000HLJMP MAINORG 0100HMAI

3、N: 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

4、ORL 33H, A ;合并字节 HERE: SJMP HERE ;踏步 END3)调试过程如下:3.1 字节拆分后的程序运行情况及Register中的内容如下所示:字节拆分后的片内RAM内容如下:调试结果分析:由源程序分析可知,当执行到字节拆分之后,片内RAM中30H,31H,32H 中的内容应为:49H,34H,39H,累加器A中的内容应为34H,寄存器R0中应保持最初的赋值为32H,对比上图所示的内容,与分析的结果相符合。3.2 字节合并后的程序运行情况及Register中的内容如下:字节合并后的片内RAM中的内容:调试结果分析:合并程序结束后,R0中的内容始终为32H不变,累加器A中的

5、内容为09H,片内RAM中的30H,31H,32H,33H的内容为49H,34H,39H,49H,与上图所示结果相符合。2. 数据块填充程序的调试过程如下1) 设计要求与资源分配如下:File name: fill.asm Date: 2011.8.20Designed by: CDHSource used: R0: 计数器 DPTR: 片外数据指针2) 源代码如下:ORG 0000HLJMP MAIN ORG 0100HMAIN:MOV SP,#40HFILL: CLR A ;A寄存器清零MOV R0, #00H ;设循环计数器 MOV DPTR, #7000H ;设数据指针FILL1: M

6、OVX DPTR, A ;传送到片外RAM INC A ;A内容加1INC DPTR ;修改数据指针 INC R0 ;修改循环计数器 CJNE R0, #00H, FILL1 ;判断是否结束HERE: SJMP HERE ;原地踏步 END 3) 调试结果如下:4) 程序的调试分析:由源代码可知,第一次填充7000H的内容为00H,接着每次地址加1,填充的内容也加1,且填充的次数为循环计数器一次循环的次数,此处循环计数器为R0,从00H到00H共256次,则填充次数为256次,7001H中填充01H.70FFH中填充FFH.对比分析与上图结果相符合,说明程序调试成功。3两个16位数的加法程序1

7、) 设计思路与资源分配如下:File name: add416.asm Description: 有4个无符号16进制数,连续存放在20H开始的片上数据区中,其中,第一个数a的低八位存放在20H单元中,高八位存放在21H单元中;第二个数b的低八位存放在22H单元中,高八位存放在23H单元中;第三个数c的低八位存放在24H单元中,高八位存放在25H单元中;第四个数d的低八位存放在26H单元中,高八位存放在27H单元中;a和b的和m的低位存放在40H单元中,高位存放在41H单元中;c和d的和n的低位存放在42H单元中,高位存放在43H单元中;m和n的低位和存放在R2中,高位和存放在R3中;高位进位

8、位存放于R4中。Date: 2017.9.28Designed by: AXMSource used: 20H,21H,22H,23H,24H,25H,26H,27H 40H,41H,42H,43H,50H,51H R2,R3,R42)程序流程图如下:3)源代码如下:ORG 0000HLJMP MAINORG 0100HMAIN: MoV 20H,#0FFH ;20H单元赋值a的低位MOV 21H,#0FFH ;21H单元赋值a的高位MOV 22H,#0FFH ;22H单元赋值b的低位MOV 23H,#0FFH ;23H单元赋值b的高位MOV 24H,#0FFH ;24H单元赋值c的低位MOV

9、 25H,#0FFH ;24H单元赋值c的高位MOV 26H,#0FFH ;25H单元赋值d的低位MOV 27H,#0FFH ;26H单元赋值d的高位CLR C ;C清零MOV A,20H ;从20H单元取值ADDC A,22H ;a,b低位相加MOV 40H,A ;a,b低位和存于40HMOV A,21H ;从21H单元取值ADDC A,23H ;a,b高位相加MOV 41H,A ;a,b高位和存于41HCLR A ;A清零ADDC A,#00H ;求出进位MOV 50H,A ;a,b和进位存于50HCLR C ;C清零MOV A,24H ;从24H单元取值ADDC A,26H ;c,d低位

10、相加MOV 42H,A ;c,d低位和存于42HMOV A,25H ;从25H单元取值ADDC A,27H ;c,d高位相加MOV 43H,A ;c,d 高位和存于43HCLR A ;A清零ADDC A,#00H ;求出进位MOV 51H,A ;c,d和进位存于51HCLR C ;C清零MOV A,40H ;从40H单元取值ADDC A,42H ;m,n低位相加MOV R2,A ;低位和存于R2MOV A,41H ;从41H取值ADDC A,43H ;m,n高位相加MOV R3,A ;高位和存于R3CLR A ;A清零ADDC A,#00H ;求出进位ADD A,50H ;进位相加ADD A,

11、51H ;进位相加MOV R4,A ;进位存于R4HERE: SJMP HERE ;踏步 END4)运行完程序后Register中的内容和片内RAM中的内容如下:5)结果分析:由源代码可知,片内RAM中的20H,21H,22H,23H,24H,25H,26H,227H中的内容都为0FFH;a,b低位相加的和存于40H的值为0FEH,高位相加的和存于41H的值为0FFH;c.d的低位相加的和存于42H的值为0FEH,高位相加的和存于43H的值为0FFH;a,b和c,d相加的高位进位分别存于50H和51H的值为01H;m,n的低位相加的和存于R2的值为0FCH,高位相加的和存于R3的值为0FFH;

12、进位存放在R4的值为03H;对比分析上图结果相符。四、思考题1怎样查看工作寄存器、SFR、片内RAM、片外RAM及程序代码空间内容?Disassembly 窗口有何作用?答:打开Register中的内容即可查看工作寄存器,SFR中的内容;打开memory,在address框中输入如:d:20H,即可查看片内RAM中的内容;打开memory,在address框中输入如:x:7000H,即可查看片外RAM中的内容;打开memory,在address框中输入如:c:2000H,即可查看程序代码空间的内容;Disassembly窗口的作用是显示每一步指令的执行情况,包括源代码的存储位置,机器码(十六进

13、制)和相应的助记符。2字节拆分、合并还有哪些方法,举一例说明。答:方法1:用出发指令,对操作数除以16,商即为高四位,余数为低四位。程序举例如下:假设20H单元中有操作数64H,要将其字节进行拆分,高四位存在R3,低四位存在R4,则程序源代码如下:ORG 0000HLJMP MAINORG 0100HMAIN: MOV 20H, #64H;20H单元赋值 MOV A, 20H;20h单元内容赋给A MOV B, #10H ;立即数10H送到B DIV AB;执行A除以B MOV R3, A ;商存于R3中 MOV R4, B;余数存于R4中HERE: SJMP HERE END运行结果如下:由

14、运行结果可知,程序实现了对字节的拆分。方法2:运用逻辑运算类指令屏蔽高四位和低四位,在对其高四位和低四位进行操作。再加SWAP指令,即可完成字节的拆分和合并。程序过程如下:假设20H单元中待操作数64H,要将其字节进行拆分,高四位存在R2,低四位存在R3,接着进行字节的合并,将合并的结果存于R1中。则程序如下:ORG 0000HLJMP MAIN ORG 0100HMAIN: MOV 20H,#64H;20H单元赋值 MOV A,20H;20H单元的值传送给A ANL A,#0FH;A与立即数相与 MOV R3,A;低位存于R3中 MOV A,20H;20H中的数据再次传给A ANL A,#0

15、F0H;A与立即数相与 SWAP A;A中的高低位转换 MOV R2,A;高位存于R2中,完成字节拆分 SWAP A;A中的高低位再次交换 ADD A,R3;拆分的高低位相加 MOV R1,A;合并结果存于R1中HERE: SJMP HERE;踏步指令 END;结束运行结果如下:运行结果分析:20H单元的数据被拆分后,高字节存放在R2中,低字节存放在R3中,字节合并后存放在R1中。说明上述方法可对字节进行拆分与合并。3. 若按递减1规律填充数据块,应如何修改程序?答:修改后的程序如下: ORG 0000HLJMP MAIN ORG 0100HMAIN:MOV SP,#40HFILL:MOV A

16、,#0FFH ;A寄存器赋值MOV R0, #00H ;设循环计数器 MOV DPTR, #7000H ;设数据指针FILL1:MOVX DPTR, A ;传送到片外RAM DEC A ;A内容减1INC DPTR ;修改数据指针 INC R0 ;修改循环计数器 CJNE R0, #00H, FILL1 ;判断是否结束HERE:SJMP HERE ;原地踏步 END运行结果如下:由结果可知,上述程序是按递减规律进行操作。4. 若从7010H单元开始,连续填充20个字节,应该如何修改程序?答:修改后的程序如下:ORG 0000HLJMP MAINORG 0100HMAIN:MOV SP,#40H

17、FILL:CLR A ;A寄存清零MOV R0, #00H ;设循环计数器 MOV DPTR, #7010H ;设数据指针FILL1:MOVX DPTR, A ;传送到片外RAM INC A ;A内容加1INC DPTR ;修改数据指针 INC R0 ;修改循环计数器 CJNE R0, #14H, FILL1 ;判断是否结束HERE:SJMP HERE ;原地踏步 END运行结果如下:由运行结果可以看出,从7010H开始连续填充了20个字节,符号题目要求。5. 若完成双字节BCD码加法,应如何修改程序?答:在加法完成后,加一条二-十进制调整指令,得到正确的BCD码 运算结果。程序举例如下:在20H单元中存有压缩BCD码24H,21H单元中有压缩BCD码39H,相加后的结果存于R3中。程序源代码如下:ORG 0000HL

温馨提示

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

评论

0/150

提交评论