一、实验目的
1.熟悉Keil软件的使用。
2.掌握简单程序的输入、编辑、编译、运行、调试的方法与步骤。
3.熟悉MCS—51的简单指令。
4.掌握数据传送指令。
二、实验内容
三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中(低位在后),加数在内部RAM的53H、54H和55H单元中(低位在后),要求把相加之和存放在50H、51H和52H单元中(低位在后),进位存放在位寻址区的00H位中。
三、实验要求
根据实验任务要求,编写源程序。
四、实验源程序及关键步骤
源程序
ORG 0000H ; 起始地址
MOV R0, #50H ; 被加数的低位存储单元
MOV R1, #53H ; 加数的低位存储单元
MOV R2, #00H ; 进位的存储单元
MOV A, @R0 ; 读被加数的低位
ADD A, @R1 ; 加上加数的低位
MOV @R0, A ; 将结果存入被加数的低位存储单元
MOV A, R2 ; 读进位
ADDC A, #00H ; 加进位
MOV R2, A
INC R0 ; 被加数的中间位存储单元
INC R1 ; 加数的中间位存储单元
MOV A, @R0 ; 读被加数的中间位
ADD A, @R1 ; 加加数的中间位
MOV @R0, A ; 将结果存入被加数的中间位存储单元
MOV A, R2 ; 读进位
ADDC A, #00H ; 加进位
MOV R2, A
INC R0 ; 被加数的高位存储单元
INC R1 ; 加数的高位存储单元
MOV A, @R0 ; 读被加数的高位
ADD A, @R1 ; 加加数的高位
MOV @R0, A ; 将结果存入被加数的高位存储单元
MOV A, R2
MOV @R0, A ; 将进位存入指定的内部RAM单元
END
五、运行结果




六、思考
如何使用指针自增的方式实现程序?
答:我将R0和R1作为指针来操作内存中的数据,并使用INC指令来实现自增。
ORG 0000H
MOV R0, #50H
MOV R1, #53H
MOV R2, #00H
MOV A, @R0
ADD A, @R1
MOV @R0, A
MOV A, R2
ADDC A, #00H
MOV R2, A
INC R0
INC R1
MOV A, @R0
ADD A, @R1
MOV @R0, A
MOV A, R2
ADDC A, #00H
MOV R2, A
INC R0
INC R1
MOV A, @R0
ADD A, @R1
MOV @R0, A
MOV A, R2
MOV @R0, A
END
七、实验总结
我进行这次实验,掌握了Keil软件的使用方法,包括输入、编辑、编译、运行和调试程序的步骤,通过编写程序,我还熟悉了MCS-51的简单指令,并掌握了数据传送指令的使用。
在这个实验中,我学到了如何进行多字节的无符号数相加。被加数存储在内部RAM的50H、51H和52H单元中,低位在后;加数存储在内部RAM的53H、54H和55H单元中,低位在后,我将相加之和存放在50H、51H和52H单元中,低位在后,并将进位存放在位寻址区的00H位中。
通过实验,我发现了一些之前不知道的地方,我了解到内部RAM中存储数据的方式,特别是多字节数据的存储顺序,然后还熟悉了如何使用位寻址区来存储特定的数据,例如进位标志位,这次实验,使我学会了如何使用数据传送指令来完成数据的读取、计算和存储过程。