两字节16进制转为4字节BCD码(汇编语言)

 

;两个字节的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放的是最低位