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

下载本文档

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

文档简介

1、微机实验报告实验名称 keilc的使用与汇编语言上机操作 指导教师 刘小英 专业班级 中法1201 姓名 肖洋 学号 u201214343 联系电话一、任务要求1.掌握keilc环境的使用 1)字节拆分、合并:调试e421.asm程序, 观察相关寄存器和单元的内容。 2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。2. 编写两个十六位数的加法程序。有两个十六位无符号数,分别存放在从20h和30h开始的数据区中,低八位先存,高八位在后,和存于r3(高八位)和r4(低八位),进位位存于r2。二、设计思路1.字节拆分、合并程序: 利用汇编语言中的 xc

2、hd 和 swap 两个语句来实现将八位二进制数拆分为两个四位二进制 数并分别存储于不同的存储空间的功能,bcd 码与 30h 相或(加上 30h)得到 ascii 码。 将两个 ascii 码和 0fh 相与(高四位清零)得到 bcd 码,利用 swap 语句将高位数放至高四位,将高位数和低位数相或可实现字节的合并。 2.数据块填充程序: 将 r0 用作计数器,dptr 用作片外数据指针,a 作为原始数据来源,依顺序在片外的存 储单元内容填充数据。 利用循环语句来减少程序长度, 并控制填充单元个数为片外 100h 个。 (通过 r0 的进位控制) 3.两个十六位数加法程序: 把第一个十六位无

3、符号数的地八位和高八位分别存于 20h 和 21h 中, 把第二个十六位无 符号数的地八位和高八位分别存于 30h 和 31h 中,对 20h 和 30h 中的两个低八位进行 add 加法操作, 结果存于 r4 中; 然后对 21h 和 31h 中的两个高八位进行 addc 带进位的加法操作, 结果存于 r3 中.然后将累加器 a 清零,并和#00h 进行 addc 带进位的加法操作,结果产生进位数并存于 r2 中,程序结束。三、资源分配1. 字节拆分、合并程序:片内 30h 单位存放原 bcd 码,31h 和 32h 存放拆分后的两个 ascii 码,33h 存放合并后的 bcd 码。 2.

4、 数据块填充程序:r0 作为计数器,dptr 作为数据指针,片外ram空间从 7000h 开始填充。 3. 两个十六位数加法程序: 20h,21h: 第一个数的低八位和高八位 30h,31h:第二个数的低八位和高八位 r4:加法结果的低八位 r3:加法结果的高八位 r2:加法结果的进位4、 流程图 1.字节拆分、合并程序 2.数据块填充程序 3.两个十六进制数相加程序五、源代码 (含文件头说明、语句行注释)1.字节拆分、合并程序file name: e421.asmdescription: 1字节bcd码转换为2字节ascii 2字节ascii码转化为1字节bcd码source used: 3

5、0h: bcd data 31h, 32h:ascii data 31h, 32h -33h org 0000hljmp mainorg 0100hmain: 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

6、;转换为bcd swap a mov 33h, a ;结果存于33h单元mov a, 32h ;从32h单元取值 anl a, #0fh ;转换为bcd orl 33h, a ;合并字节 here: sjmp here ;踏步 end 2.数据块填充程序:将片外ram 7000h-70ffh单元按一定规律填充file name: fill.asm source used: r0: 计数器 dptr: 片外数据指针org 0000hljmp main org 0100hmain:mov sp,#40hfill: clr a ;a寄存器清零mov r0, #00h ;设循环计数器 mov dptr

7、, #7000h ;设数据指针fill1: movx dptr, a ;传送到片外ram inc a ;a内容加1inc dptr ;修改数据指针 inc r0 ;修改循环计数器 cjne r0, #00h, fill1 ;判断是否结束here: sjmp here ;原地踏步 end 3. 两个十六位数加法程序:file name: add.asmdescription: source used: org 0000h ljmp main org 0100hmain: clr c ;进位清零 mov 20h,#11h ;赋值 mov 21h,#19h mov 30h,#90h mov 31h,

8、#09h mov r0,#20h ;置数据指针 mov r1,#30h mov a,r0 ;取第一个数低位 add a,r1 ;两位数低位相加 mov r4,a ;存“和”低位 addc a,#00h ;处理地位相加进位 inc r0 ;修改指针 inc r1 mov a,r0 ;取第一个数高位 addc a,r1 ;两数高位相加 mov r3,a ;存“和”高位 clr a addc a,#00h ;处理高位相加进位 mov r2,a ;最终进位存于r2here: sjmp here ;原地踏步 end6、 程序测试方法与结果1.字节拆分、合并程序:测试方法:单步调试观察寄存器变量和片内ra

9、m的存储空间。结果如图:性能分析:该程序能很方便地实现将一个bcd码拆分为两个ascii码以及将两个ascii码合并成一个bcd码的功能。2.数据块填充程序:测试方法:利用程序的运行和停止控制来观察最终的寄存器变量和片内ram的存储空间。结果如图:性能分析:从寄存器变量dptr最后的取值(7100h)来看,该程序能实现片外ram从7000h到70ffh的数据填充。程序中利用r0从00h到ffh的计数中产生的进位很巧妙地控制了循环的次数。3.两个十六进制数相加测试方法:手动输入两个加数,运行程序,观察结果是否正确。在调试过程中,跟踪a,r2,r3,r4的值,看是否与预期相同。结果如图:结果:输入

10、两个十六进制数为1911h和0990h,得出合数为22a1h,进位为0,各项指标均与预期相同,程序正确。7、 思考题1怎样查看工作寄存器、sfr、片内ram、片外ram及程序代码空间内容?disassembly 窗口有何作用?(1)选择debug下的start/stop debug session,在界面的左侧会出先程序代码的空间地址内容(2)disassembly窗口可以显示编译之后的汇编代码2. 字节拆分、合并还有哪些方法,举一例说明(1)字节拆分可以利用与运算anl,例如将30h单元中的数据从中间拆分,低字节存于31h,高字节存于32h: mov a, 30h anl a, #0fh m

11、ov 31h, a mov a,30h anl a, #f0hmov 32h,a (2) 合并字节可以利用或运算orl,例如将31h单元中的数据和32h单元中的数据合并,结果存放于30h中: mov a,31h swap aorl a,32h mov 30h,a3. 若按递减1规律填充数据块,应如何修改程序?修改后程序如下 org 0000hljmp main org 0100hmain:mov sp,#40hfill: clr a ;a寄存器清零mov r0, #ffh ;设循环计数器 mov dptr, #70ffh ;设数据指针fill1: movx dptr, a ;传送到片外ram

12、dec a ;a内容减1dec dptr ;修改数据指针 dec r0 ;修改循环计数器 cjne r0, #ffh, fill1 ;判断是否结束here: sjmp here ;原地踏步 end 4.若从7020h单元开始,连续填充10个字节,应该如何修改程序? org 0000h ljmp main org 0100hmain:mov sp, #40hfill: clr a ;a寄存器清零 mov r0, #00h ;设循环计数器 mov dptr, #7020h ;设数据指针fill1: movx dptr, a ;传送到片外ram inc a ;a内容加1 inc dptr ;修改数据指针 inc r0 ;修改循环计数器 cjne r0, #10h, fill1 ;判断是否结束here: sjmp here ;原地踏步 end 5. 若完成双字节bcd码加法,应如何修改程序? org 0000hljmp mainorg 0100hmain: mov sp, #40h mov 20h, #0abhmov 21h, #99hm

温馨提示

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

评论

0/150

提交评论