80C51的程序设计.ppt
文本预览下载声明
二、多字节数乘法运算 例 双字节无符号数的乘法。 设双字节的无符号被乘数存放在R3、R2中,乘数存放在R5、R4中,R0指向积的高位。 主程序段如下: MULTB:MOV R7,#04 ;结果单元清0 LOOP: MOV @R0,#00H INC R0 DJNZ R7,LOOP DEC R0 ;R0指向最低位 ACALL BMUL SJMP $ 另有2段子程序: BMUL RADD(在BMUL中被调用) RADD:ADD A,@R0 MOV @R0,A MOV A,B INC R0 ADDC A,@R0 MOV @R0,A INC R0 MOV A,@R0 ADDC A,#00H ;加进位 MOV @R0,A RET +) ↑R0 ((R0)) ((R0+1)) ((R0+2)) ((R0)) ((R0+1)) ((R0+2)) A B 0 BMUL:MOV A,R2 MOV B,R4 MUL AB ;低位乘 ACALL RADD MOV A,R2 MOV B,R5 MUL AB ;交叉乘 DEC R0 ACALL RADD MOV A,R4 MOV B,R3 MUL AB ;交叉乘 DEC R0 DEC R0 ACALL RADD MOV A,R5 MOV B,R3 MUL AB ;高字节乘 DEC R0 ACALL RADD DEC R0 RET 一、十六进制数与ASCII码间的转换 十六进制数与ASCII码的对应关系如表所示。当十六进制数在0~9之间时,其对应的ASCII码值为该十六进制数加30H;当十六进制数在A~F之间时,其对应的ASCII码值为该十六进制数加37H。 4.4.2 码型转换 0111 0110 67H 压缩BCD 0110 0000 06H 0111 0000 07H BCD码 0110 0011 36H 0111 0011 37H ASCII码 0011 0100 43H 二进制 67的不同表示 例 将1位十六进制数转换成相应的ASCII码。设十六进制数存放在R0中,转换后的ASCII 码存放于R2中。 HASC:MOV A,R0 ;取4位二进制数 ANL A,#0FH ;屏蔽掉高4位 PUSH ACC ;4位二进制数入栈 CLR C ;清进(借)位位 SUBB A,#0AH ;与10比较 POP ACC ;弹出原4位二进制数 JC LOOP ;10,转LOOP ADD A,#07H ;10~15时,先加7 LOOP:ADD A,#30H ;加30H MOV R2,A ;ASCII码存于R2
显示全部