yasuokaの日記: Re:Z80における定数10の除算 1
日記 by
yasuoka
昨日の日記で、Z80で100未満の数値を10で除算処理するというのに挑戦してみたのだが、見事にバグってしまった。Bレジスタに0~99の整数が入っている時に、10で除算した商をHレジスタに、余りをAレジスタに返す、という問題なのだが、1/10≒103/1024で商を求めるべく、再挑戦しようと思う。
78 LD A,B
2F CPL
0F RRCA
0F RRCA
0F RRCA
F6 E0 OR E0H
80 ADD B
0F RRCA
0F RRCA
E6 3F AND 3FH
80 ADD B
80 ADD B
80 ADD B
17 RLA
17 RLA
17 RLA
17 RLA
E6 0F AND 0FH
67 LD H,A
これで、今度こそHレジスタに商が求まるはずなので、あとは10倍してBレジスタから引けば、余りが求まる。
AF XOR A
94 SUB H
87 ADD A
87 ADD A
94 SUB H
87 ADD A
80 ADD B
ただ、103/1024は、正直なところスジが良くない。何とかもう少し、手を抜く方法がないかなぁ。
1/10≒51/512 (スコア:2)
51/512の方が、商を求める部分が速くなるみたいです。
ただ、1/10より少し小さいので、INC Aで補正してます。