投稿日: Mar 30, 2017 7:14:22 AM
ので、自力で書かないといけません。
z80では拡張されていて各種レジスタをシフトできるのですが。
今回のモニタプログラムではDEレジスタにアドレスをストアしておくことにしましたのでDEレジスタを4ビットごとにシフトする必要が出てきます。
他にも使えるかもしれないのでとりあえず1bitシフトのファンクションを作って、それを外からループで呼び出してやることにします。
;bit shift left DE resister shiftde: push af ld a,d rla ld d,a ld a,e rla ld e,a jp nc,shiftdee ld a,d ; process carry or 0x01 ld d,a shiftdee: pop af ret
DEレジスタを8bitごとに処理してやります
Dレジスタの内容を左シフト、次にEレジスタの内容を左シフト。
Eレジスタをシフトする際にキャリーフラグが立っていたらDレジスタに反映してやる必要がありますので、もしキャリーフラグが立っていた場合はDレジスタに or 0x01してやります。
すべてアキュムレータ(Aレジスタ)経由で行うのでやたらld命令が多くなるっていうのが8080とかz80の特徴かもしれませんね。
なれればそんなに気になりません。