;两个字节的16进制数存放在40H、41H
;转换出来的BCD码存放在50H~53H
;求问这个子程序是实现这个功能的吗
OCT: ;换成bcd码
MOV R0,#50H ;用来存放结果
MOV R2,#4 ;取十进制位数减一
CFYS:
MOV R1,#40H ;给高字节地址
MOV B,#00H
SCCF:
MOV A,@R1
ANL A,#0F0H ;屏蔽低4位
ORL A,B ;?合并给A(被除数)
SWAP A
MOV B,#10
DIV AB ;商是A,余数是B
SWAP A ;把高四位还回去
XCH A,@R1
ANL A,#0FH ;屏蔽高四位
XCH A,B
SWAP A
ORL A,B ;合并给A(被除数)
MOV B,#10
DIV AB
ORL A,@R1;合并给A
MOV @R1,A
INC R1
CJNE R1,#43H,SCCF ;是否完成一次10运算
MOV @R0,B
INC R0
DJNZ R2,CFYS ;是否完成全部运算
MOV @R0,A
RET
我悟了,这就和十进制转2进制一样的道理,但是50H放的是最低位