パスワードを忘れた? アカウント作成
13969194 journal
日記

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は、正直なところスジが良くない。何とかもう少し、手を抜く方法がないかなぁ。

この議論は、yasuoka (21275)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。
  • by yasuoka (21275) on 2019年07月30日 9時01分 (#3660327) 日記

    51/512の方が、商を求める部分が速くなるみたいです。

    78      LD A,B
    0F    RRCA
    0F    RRCA
    0F    RRCA
    0F    RRCA
    E6 0F  AND 0FH
    3C     INC A
    80     ADD B
    4F      LD C,A
    81     ADD C
    81     ADD C
    17     RLA
    17     RLA
    17     RLA
    17     RLA
    E6 0F  AND 0FH
    67      LD H,A

    ただ、1/10より少し小さいので、INC Aで補正してます。

typodupeerror

開いた括弧は必ず閉じる -- あるプログラマー

読み込み中...