KeilC使用与汇编语言上机操作.docVIP

  • 14
  • 0
  • 约2.48千字
  • 约 8页
  • 2018-06-07 发布于未知
  • 举报
《微机实验》报告 实验名称 KeilC的使用与汇编语言上机操作 指导教师 曹丹华 专业班级 xxxxxxxxxxxxxxx 姓名 xxxxxx 学号 xxxxxxxxxxx 联系方式 xxxxxxxxxxxxx 任务要求 1.掌握KeilC环境的使用 1)字节拆分、合并:调试e421.asm程序, 观察相关寄存器和单元的内容。 2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。 2. 编写两个十六位数的加法程序。 有两个十六位无符号数,分别存放在从20H和30H开始的数据区中,低八位先存,高八位在后,和存于R3(高八位)和R4(低八位),进位位存于R2。 设计思路 对于16位的两个无符号数做加法,应该先做低8位加法(半加器),再做高8位带进位加法(全加器),最后保存C位。 资源分配 两个数的低8位存放位置:20H、30H 两个数的高8位存放位置:21H、31H 程序从0000H开始,做加法过程中将数据存放在R4和R3,完成后将C位转存到R2。 流程图 五、源代码 ;这个程序实现了两个16位数:2A10H和0021H相加 ORG 50H LJMP MAIN ORG 0000H MAIN: CLR C ;将进位清零 MOV 20H,#10H MOV 21H,#2AH MOV 30H,#21H MOV 31H,#00H MOV R0,20H ;将A中的低位存入R0中 MOV A,30H ;将B中的低位存入A累加器中 ADDC 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 ;其和存入R3中 CLR A ;清零累加器A ADDC A,#0 ;将进位存入A MOV R2,A ;将进位存入R2 SJMP HERE ;原地踏步 END 六、程序测试方法与结果、软件性能分析 测试采用直接加两个给定的数的方法,检查加法结果和进位是否正常。其中2A10H存放在20H,0021H存放在30H。 执行完赋值语句后: 执行完低8位加法: 执行完高8位加法: 程序执行完毕: 从寄存器的结果来看,程序功能正常。 七:思考题 怎样查看工作寄存器、SFR、片内RAM、片外RAM及程序代码空间内容?Disassembly 窗口有何作用? 工作寄存器:view-registers window SFR:view-registers window peripherals 片内RAM:view-memory window 并且在address里输入d:xxxxH 片外RAM:view-memory window 并且在address里输入x:xxxxH 程序代码:view-memory window 并且在address里输入c:xxxxH Disassembly窗口:用来查看编译好的机器码和反汇编代码 字节拆分、合并还有哪些方法,举一例说明。 字节拆分: 假设一个字节存在20H单元里,将它的高4位存入R0,低4位存入R1,以下为实现的代码: MOV A,20H SWAP A ;准备拆分 MOV B,#10H MUL AB ;保留高4位在A中 MOV R0,A ;存数据 MOV A,20H MOV B,#10H SWAP A ;准备拆分 DIV AB ;保留低4位在A中 MOV A,R1 ;存数据 字节合并: 假设将R0的低4位和R1的高4位合并存入A,以下为实现代码: MOV A,R0 MOV B,#10H MUL AB ;保留低4位在A SWAP A ;将低4位换回正确的位置 MOV R0,A MOV A,R1 MOV B,#10H DIV AB ;保留高4位在A SWAP A ;将高4位挽回正确的位置 ADD A,R0 ;拼接字符 当然,这个方法效率低下,不实用。 若按递减1规律填充数据块,应如何修改程序? 下为已经修改过的代码,与原代码不同的地方独立成行 若从7020H单元开始,连续填充10个字节,应该如何修改程序? 下面为已经修改过的代码,被改过的地方独立成行 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV SP,#40H FILL: CLR A ;A寄存器清零 MOV R0, #F0H ;设循环计数器 MOV DPTR, #7020H ;

文档评论(0)

1亿VIP精品文档

相关文档