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

yasuokaの日記: Z80における2進→BCD変換 1

日記 by yasuoka

ネットサーフィンしていたところ、私(安岡孝一)の8月3日の日記の読者が、Z80で2進→BCD変換に挑戦しているのを見つけた。Bレジスタに0~99の整数が入っている時に、10で除算した商をAレジスタの上位4ビットに、余りをAレジスタの下位4ビットに返す、という問題である。私個人の直感としては、DAAを駆使する方が、読みやすくて速い気がする。

78      LD A,B
E6 78  AND 78H
0F    RRCA
0F    RRCA
0F    RRCA
27     DAA
87     ADD A
27     DAA
87     ADD A
27     DAA
87     ADD A
27     DAA
4F      LD C,A
78      LD A,B
E6 07  AND 07H
81     ADD C
27     DAA

7月30日の日記に示した方法の圧縮版だが、19バイト74ステートといったところだろうか。ただ、あまり細かい点を詰めてないので、もうちょっと高速化できるような気もする。何かいい方法ないかなぁ。

この議論は、yasuoka (21275)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。
  • こんにちは
    新アイディアは残念ながら浮かびませんでした。
    同じ手法ですが3ステート改善

      78    LD A,B  ; 4
      E6 07  AND 07H  ; 7
      4F    LD C,A  ; 4
      78    LD A,B  ; 4
      91    SUB C   ; 4
      0F    RRCA   ; 4
      0F    RRCA   ; 4
      0F    RRCA   ; 4
      27    DAA   ; 4
      87    ADD A,A  ; 4
      27    DAA   ; 4
      87    ADD A,A  ; 4
      27    DAA   ; 4
      87    ADD A,A  ; 4
      27    DAA   ; 4
      81    ADD A,C  ; 4
      27    DAA   ; 4

typodupeerror

一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy

読み込み中...