2017-02-24 177 views
0

http://zxm.speccy.cz/data/Z80%20Bits.html#2.2z80分割算法是否被破壞?

輸入:HL =股利,C =除數,A = 0 輸出:HL =商數,A =餘

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

當我嘗試,並設置HL = $ 1200, = 0,c = $ 91,我在HL中得到0。它不應該是1美元嗎?

+0

我相信當c> 7Fh和HL> 00FFh時代碼可能會失敗。假設A == 80h的輸入位爲1,那麼它將滾動到A == 01h。但是,如果您在C> 7Fh的情況下執行單獨的情況,則可以將前8次迭代優化爲:ld a,h \ ld h,l \ ld l,0。 – Zeda

回答

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

+0

似乎很好。感謝一堆! –