1、1. 实验目的 掌握算术运算类、逻辑运算类指令的使用方法; 掌握 BCD 码、补码数制表示方法; 掌握运算程序及循环程序的编写和调试方法。2. 预习要求 理解 8051 单片机的算术运算指令; 理解补码表示数值的方法; 理解压缩、非压缩 BCD 码表示数值的方法; 如何实现多位数的 BCD 码加、乘、除运算; 如何实现多位数的 BCD 码减法运算; 预习本实验内容,以及相关课程内容。3. 实验设备计算机 1 台。4. 基础型实验内容 以下程序完成单字节的 BCD 码加法功能,完成空白处程序填写,并在 Keil 环境运行程序,观察寄存器及内存单元的变化。RESULT EQU 30HORG 000
2、0HMOV A,#99HMOV B,#99HADD A , B DA A ; BCD 码相加并得到 BCD 码结果MOV RESULT,A MOV A,#00HADDC A,#00HMOV RESULT+1,A ;高位处理LJMP $END运行结果如下: 下列程序完成多字节 BCD 码加法运算。内部 RAM30H 开始的 4 字节长的 BCD 码和外部 RAM 1000H开始的 4 字节长的 BCD 码相加,结果放在 1100H 开始的单元中(从低字节到高字节) 。 ORG 0000HCLR CMOV R5, #04HMOV R0,#30HMOV R1,#10HMOV R2,#00HMOV R
3、3,#11HMOV R4,#00HL1:MOV DPH,R1MOV DPL,R2MOVX A,DPTRADDC A, R0DA A ;十进制调整MOV DPH,R3MOV DPL,R4MOVX DPTR,AINC R2INC R4INC R0L2:DJNZ R5, L1JNC L3MOV DPTR,#1104H ;有进位则结果的第五个字节置 1MOV A,#01H MOVX DPTR,AL3:NOPEND运行前:运行结果如下:5. 设计型实验内容 设计程序,实现任意字节压缩 BCD 码的相加,使用单步、断点方式调试程序,查看结果。源程序如下:ORG 0000HCLR CMOV R5, #03H
4、MOV R0,#30HMOV R1,#10HMOV R2,#00HMOV R3,#11HMOV R4,#00HL1:MOV DPH,R1MOV DPL,R2MOVX A,DPTRADDC A, R0DA A MOV DPH,R3MOV DPL,R4MOVX DPTR,AINC R2INC R4INC R0L2:DJNZ R5, L1JNC L3MOV DPTR,#1106H MOV A,#01H MOVX DPTR,AL3:NOPEND输入数据:运行结果如下: 设计程序,实现多字节十六进制数的减法 123456H005634H,使用单步、断点方式调试程序,查看结果。源程序如下:MOV R0,#
5、30HMOV R1,#40HMOV R6,#03HCLR CL1:MOV A,R0SUBB A,R1MOV R0,AINC R0INC R1DJNZ R6,L1JNC L2MOV 33H,#1L2: NOPEND运行前:运行后: 在内部 RAM 的 30H 单元开始,有一串带符号数据块,其长度在 10H 单元中。编程求其中正数与负数的和,并分别存入 2CH 与 2EH 开始的 2 个单元中。 (负数存放形式为补码) 。请分别在 30H单元开始写入 5 个正数、11 个负数和 9 个正数、7 个负数的情况,记录程序运行结果。例如:输入-69H,65H,-7H, -25H ,-47H,56H, -
6、3H,17H,6H,-5H,-45H, -1H, -57H, 23H ,-5H,-13H 则正数的和 89,负数的和-199H。源程序如下:ORG 0000HMOV R0,#30HMOV R6,#10HMOV 2CH,#0MOV 2DH,#0MOV 2EH,#0MOV 2FH,#0CL1:MOV A,R0JB ACC.7,rel1ADD A,2CHJC rel2MOV 2CH,AINC R0DJNZ R6,CL1LJMP rel4rel1:CLR ACC.7ADD A,2EHJC rel3MOV 2EH,AINC R0DJNZ R6,CL1LJMP rel4rel2:INC 2DHMOV 2CH,AINC R0DJNZ R6,CL1LJMP rel4rel3:INC 2FHMOV 2EH,AINC R0DJNZ R6,CL1rel4:MOV A,2FHXRL A,#0FFHMOV 2FH,AMOV A,2EHXRL A,#0FFHMOV 2EH,AADD A,#1JC rel5SETB 2FH.7SJMP $rel5:INC 2FHSETB 2FH.7END运行前:运行后: