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ステートといったところだろうか。ただ、あまり細かい点を詰めてないので、もうちょっと高速化できるような気もする。何かいい方法ないかなぁ。
新アイディアは思い浮かばず (スコア:1)
こんにちは
新アイディアは残念ながら浮かびませんでした。
同じ手法ですが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