在 8085 处理器上,将 BCD 转换为二进制表示时,将 BCD 除以 2 的有效算法会派上用场。您可能会想到递归减法或乘以 0.5,但是这些算法需要冗长的算术。
因此,我想与您分享以下更有效的代码(在 8085 汇编程序中)。该代码已在 GNUSim8085 和 ASM80 仿真器上进行了全面测试。如果此代码对您有帮助,请与我分享您的经验。
在运行代码之前,将 BCD 放入寄存器 A。如果要从更重要的字节(值 50)接收余数,则设置进位标志。执行后,寄存器 A 将包含结果。进位标志用于将余数(如果有)传递到下一个较低有效字节。
该算法在以非常特殊的方式操作 C 和 AC 标志之后使用 DAA 指令,因此考虑到传递到下一个半字节(即半八位字节)的任何余数都值 5 而不是 8。
;Division of BCD by 2 on an 8085 processor
;Set initial values.
;Register A contains a two-digit BCD. Carry flag contains remainder.
stc
cmc
mvi a, 85H
;Do modified decimal adjust before division.
cmc
cma
rar
adc a
cma
daa
cmc
;Divide by 2.
rar
;Save quotient and remainder to registers B and C.
mov b, a
mvi a, 00H
rar
mov c, a
;Continue working on decimal adjust.
mov a, b
sui 33H
mov b, a
mov a, c
ral
mov a, b
hlt