这个z80划分算法坏了吗?

时间:2017-02-24 11:50:13

标签: division z80

http://zxm.speccy.cz/data/Z80%20Bits.html#2.2

输入:HL =红利,C =除数,A = 0 输出:HL =商数,A =余数

add hl,hl       ; unroll 16 times
rla         ; ...
cp  c       ; ...
jr  c,$+4       ; ...
sub c       ; ...
inc l       ; ...

当我试一试,并设置hl = $ 1200,a = 0,c = $ 91时,我在HL中得到0。不应该是$ 1f?

1 个答案:

答案 0 :(得分:1)

它坏了。这是固定版本:

add hl,hl       ; unroll 16 times
rla             ; ...
jr  c,$+5       ; important!
cp  c           ; ...
jr  c,$+4       ; ...
sub c           ; ...
inc l           ; ...

如果您将$1200移至A注册,则会发现它永远不会超过$91。但是一旦达到$90,下一次比较就需要针对$120而不是$20。检查进位我添加了处理这种情况。

看起来该页面上的许多示例都有类似的问题。

顺便说一句,adc a,a可以代替rla使用,速度或大小没有变化,但清晰度大幅增加。很明显,AHL被视为24位数字。