华科光电 单片机第一次试验报告Word文档格式.docx
《华科光电 单片机第一次试验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《华科光电 单片机第一次试验报告Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
在低位相加时,使用ADD指令即可,而在高位相加时,应考虑进位,故使用ADDC指令,考虑到高位相加也可能产生进位,故分配另一个地址存放。
三、资源分配
根据题目的条件,将加数与被加数分别存放在以20H、30H开始的数据区中,然后将二者之和存放于寄存器R3(高8位)、R4(低8位),进位位存放于R2中。
四、流程图
五、源代码(含文件头说明、资源使用说明、语句行注释)
Filename:
test01.asm
Description:
两个16位数加法的程序
Date:
2013/09/30
Designed:
haha
Sourceused:
20H:
加数A的低位
21H:
加数A的高位
30H:
加数B的低位
31H:
加数B的高位
R4:
和的低位
R3:
和的高位
R2:
和的进位位
ORG0000H
LJMPSTART
ORG0100H
START:
MOV20H,#78H;
将加数存放到相应的内存中
MOV21H,#56H
MOV30H,#76H
MOV31H,#98H
MOVR0,#20H;
以R0作为被加数的地址索引
MOVR1,#30H;
以R1作为加数的地址引索引
MOVA,@R0
ADDA,@R1;
低字节相加
MOVR4,A;
存放低字节之和至寄存器R4
INCR0
INCR1:
地址索引加1
MOVA,@R0
ADDCA,@R1;
高字节相加带进位位
MOVR3,A;
高字节之和存入R3
CLRA;
将A清零
ADDCA,#00H
MOVR2,A;
将进位位存入R2
END
六、程序测试方法与结果、软件性能分析
测试方法:
手动输入两个加数,运行程序,观察结果是否正确。
在调试过程中,跟踪A、R4、R3、R2的值,看是否与预期相同。
结果:
各项指标均与预期相同,程序正确。
截图如下
附加:
思考题
1.怎样查看工作寄存器、SFR、片内RAM、片外RAM及程序代码空间内容?
Disassembly窗口有何作用?
答:
点击调试后,在左侧Register窗口中可以清晰的看到,工作寄存器R0-R7,特殊功能寄存器SFW,和PSW中的内容。
再右下角Memory窗口中,输入d:
0x____可以看片内RAM的内容;
输入x:
0x____可以查看片外RAM的内容。
输入c:
0x____可以查看程序代码空间内容。
Disassembly窗口的作用是显示每一步指令的执行情况,包括源代码的储存位置机器码和相应的助记符。
2.字节拆分、合并还有哪些方法,举一例说明。
可以使用逻辑运算类指令屏蔽高四位和第四位,再对第四位和高四位进行操作,然后利用SWAP指令,就可以完成字节的拆分和合并。
不妨设20H单元中有待操作数86H,要将其字节拆分,高四位存于R3,低四位存于R4,接着进行字节的合并,将合并后的结果存于R2中,源代码如下:
MOV20H,#86H;
20H单元赋初值
MOVA,20H;
20H单元的内容赋给A
ANLA,#0FH;
高四位清零
MOVR4,A;
低四位存于R4
MOVA,20H;
20H单元内容赋给A
ANLA,#0F0H;
低四位清零
SWAPA;
低四位移至高四位
MOVR3,A;
结果存于R3,字节拆分结束
SWAPA;
移回低四位
ADDA,R4;
A中的内容与R4的内容相加
MOVR2,A;
结果存于R2中,字节合并完成
HERE:
SJMPHERE
END
调试结果如下:
字节拆分字节合并
3.若按递减一的规律填充数据块,应如何修改程序
答:
程序的修改后的源代码如下:
START:
MOVA,#0FFH;
将立即数OFFH存入累加器A
MOVR0,#00H;
RO指向00H
MOVDPTR,#7000H;
DPTR指向7000H
FILL:
MOVX@DPTR,A;
传递到片外RAM
DECA;
A减一
INCDPTR;
数据指针加一
INCR0;
修改循环计数器
CJNER0,#00H,FILL;
判断是否结束
HERE:
SJMPHERE;
原地踏步
END
调试截图如下:
4.若从7020H单元开始,连续填充10个字节,应该如何修改程序?
CLRA;
累加器A清零
MOVR0,#0AH;
设计数器初值
MOVDPTR,#7020H;
设数据指针初值
FILL:
MOVX@DPTR,A;
传送到片外RAM
INCA;
累加器A加一
INCDPTR;
数据指针加一
DJNZR0,FILL;
判断是否结束
HERE:
SJMPHERE;
原地踏步
结果如图
5.若完成双字节BCD码加法,应如何修改程序?
不妨设第一个BCD码存于40H,41H;
第二个存于45H,46H
程序代码:
ORG000H
MOVA,40H;
将加数低8位存入A
ADDA,45H;
两者低8位相加,和存于A
DAA;
二-十进制转化
MOV50H,A;
和的低8位存于50H
MOVA,41H;
将加数高位存于A
ADDCA,46H;
两者高8位相加,和存于A
二—十进制转化
MOV51H,A;
和的高位存于51H
SJMPHERE
七、心得与体会
通过本次试验,了解了keil软件的安装与使用,强化了各种转移指令,运算指令的应用。
基本熟悉了汇编语言的格式与使用规则,受益匪浅。
在独立完成实验的同时,锻炼了我们保持冷静,独立思考的能力。