这个z80除法算法坏了吗?

Is this z80 division algorithm broken?

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 吗?

它坏了。这是固定版本:

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

如果您将 00 移动到 A 寄存器,您会发现它永远不会大于 </code>。但是一旦达到 <code>,下一次比较就需要针对 0 而不是 </code>。我添加的进位检查处理了这种情况。</p> <p>看起来该页面上的许多示例都有类似的问题。</p> <p>顺便说一句,<code>adc a,a 可以用来代替 rla,速度或大小没有变化,但清晰度有很大提高。很明显 AHL 被视为 24 位数字。