微机实验报告KEIL的使用与汇编语言上机操作Word文档格式.docx
《微机实验报告KEIL的使用与汇编语言上机操作Word文档格式.docx》由会员分享,可在线阅读,更多相关《微机实验报告KEIL的使用与汇编语言上机操作Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
签字:
2016年10月11日
Keil的使用与汇编语言上机操作
编写多个十六位数的加法程序,有4个十六位无符号数,连续存放在20H开始的片上数据区中,低八位先存,高八位在后。
要求:
和存于R3〔高八位〕和R2〔低八位〕,进位位存于R4。
1.先将20H21H和22H23H的两个16位数相加。
用R0,R1存储被加的两个数的地址,低位相加之后,结果保存在R2,将R0,R1存储的地址自加1,进展高位相加,结果保存在R3。
完成一次两个16位数的相加之后,低位相加结果存储在18H,高位结果存储在19H,进位保存在R4
2.R0改为18H,R1改为24H,将第一次的结果再和第三个数相加,假如有进位,R4加1
改为18H,R1改为26H,将第二次的结果再和第四个数相加,假如有进位,R4加1
4.最后R2储存的是低八位,R3保存的高八位,R4保存的总进位
20H--27H保存四个16位数
R2保存每次加法的低8位
R3保存每次加法的高8位
R0R1每次加法运算的两个数的地址
R4保存进位结果
19H18H两个16位数之后的数上下位的保存地址
A中间运算
四、流程图
五、源代码
Filename:
jiafa.asm
ORG0000H
MOV27H,#25H
MOV26H,#25H
MOV25H,#25H
MOV24H,#0E5H
MOV23H,#0F5H
MOV22H,#25H
MOV21H,#25H
MOV20H,#0F5H;
赋值
CLRC
MOVR2,#00H;
暂存每次加法的低位结果
MOVR3,#00H;
暂存每次加法的高位结果
MOVR4,#00H;
记录4个16位数相加的进位
MOVR0,#20H;
第一次相加
MOVR1,#22H
MOVA,R0
ADDA,R1
MOVR2,A;
低位相加和保存到R2
INCR0
INCR1;
地址加1,进展高位相加
ADDCA,R1
MOVR3,A;
高位相加和保存到R3
JNCJINW1;
如果有进位,R4加1
MOVA,R4
ADDA,#01H
MOVR4,A
JINW1:
CLRC;
将第一次相加的结果与第三个数相加
MOV18H,R2;
保存每次运算后的低位结果在18H
MOV19H,R3;
保存每次运算后的高位结果在19H
MOVR0,#18H;
将结果和新的数相加
MOVR1,#24H;
新数的地址
MOVR2,A
INCR1
MOVR3,A
JNCJINW2
JINW2:
CLRC;
将第二次相加的结果与第四个数相加
MOV18H,R2
MOV19H,R3
MOVR0,#18H
MOVR1,#26H
JNCJINW3
JINW3:
SJMP$
END
1.字节拆分、合并程序的调试:
第一步:
拆分为两个数
第二步:
转换为ASCII码
第三步:
取出两个ASCII码并合并
2.数据块填充程序调试:
从7000H开始赋值,每赋值一次,R0加1记录次数,A也加1
R0加到00H,完毕循环赋值
总共运行256次
四个数分别为25F5H,F525H,25E5H,2525H
观察每次相加之后各个存放器的值,进位的值,
25F5H与F525H相加,应该是11B1AH
19H18H处分别是1B1A,R4保存的进位为1
11B1AH与25E5相加,结果应该是140FFH
140FFH与2525H相加,结果应该是16624H
测试之后的结果为16624H,R4保存进位位,上下8位分别保存在R3,R2
七、思考题
1.在调试时,Registers窗口中可以查看Regs和Sys,分别是工作存放器和SFR
VIEW-MEMORYWINDOWS-MEMORY1/2/3/4,查看片RAM,输入D:
18H格式的语句,查看片外RAM,输入X:
3000H格式的语句,查看程序代码,输入C:
0100H格式的语句
Disassembly窗口可查看各程序指令存放的程序地址,在运用PC查表时可以用到,也可以查看指令的长度
2.字节拆分、合并:
(使用ADD指令)
MOV30H,#49H
MOVA,30H
ANLA,#0FH;
取出低位
ADDA,#30H;
变成ASCII码
MOV31H,A;
结果存于31H
ANLA,#0F0H
SWAPA;
取出高位
MOV32H,A;
结果存于32H
MOVA,31H;
取出低位的ASCII码
转为BCD
MOV33H,A;
存于33H
MOVA,32H;
取出高位的ASCII码
SWAPA
ADDA,33H;
高位低位相加,合并在一起
MOV33H,A;
把合并的数存在33H
3.CLRA改为MOVA,#FFH
INCA改为DECA
4.MOVDPTR,#7000H改为MOVDPTR,#7010H
CJNER0,#00H,FILL1改为CJNER0,#14,FILL1
5.在每条ADD或ADDC指令的后面加上一条DAA指令