0

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

4

1 回答 1

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 位数字。

于 2017-02-24T18:44:00.673 回答