self: jmp self
rt_sub:
bc 0x03,0 c标志清0
rlc 0x20 被除数左移1位
rlc 0x21
rlc 0x22
rlc 0x23
jbc 0x03,0
jmp rt3 c标志为1则直接相减
mov a,0x23 c标志为0则先比较大小
mov 0x25,a
mov a,0x22
mov 0x24,a
mov a,0x31 先比较高位
sub 0x25,a
jbc 0x03,2
jmp rt1 高位相等跳rt1比较低位
jmp rt2 高位不等跳rt2
rt1: mov a,0x30 比较低位
sub 0x24,a
jbc 0x03,2
jmp rt3 低位也相等则跳rt3,相减,上1
rt2: jbs 0x03,0
ret 减数大则返回,减数小则相减,上1
rt3: bs 0x20,0 上1
call sub_2b 调2字节减法子程
ret
sub_2b:
mov a,0x31 高字节相减
sub 0x23,a
mov a,0x30 低字节相减
sub 0x22,a
jbc 0x03,2
ret 低字节相等,无借位,返回
jbc 0x03,0
ret 无借位,返回
dec 0x23 低字节相减有借位,高字节结果减1
ret
eop
六 BCD数转换为二进制数
两字节压缩BCD码转换为两字节二进制数。算法如下:
BCD码abcd=1000a+100b+10c+d=10{10[10a+b]+c}+d,将各位BCD码分离出之后,即可根据此式转换为二进制数。涉及到乘法运算和多字节加法运算。
0X20,0X21中为BCD码,0X21高4位为最高位。转换结果放在0X30,0X31中。
main: mov a,@0x79
mov 0x20,a
mov a,@0x54
mov 0x21,a 赋值
mov a,0x20
and a,@0x0f
mov 0x22,a
swapa 0x20
and a,@0x0f
mov 0x23,a
mov a,0x21
and a,@0x0f
上一篇:EMC单片机写的I2C程序