(2) シフトと減算の組み合わせで実現する
割る数が 2のN乗でない場合、「割られる数から割る数をいくつ引けるか?」で求めるわけですが、
乗算の時と同じように2進数の筆算にすることで演算量を減らします。
下記にサンプルを示します。D = A / B, E = A mod B を演算します。
ただし、B = 0 の場合は正しい結果を得られません。
LD C,A
XOR A
LD D,A
LD E,B
LD B,8
LOOP:
SLA C
RLA
SUB E ; 試しに引いてみる
JP NC,SKIP_ADD ; 引けた場合は SKIP_ADD
ADD A,E ; 引きすぎた分を足し戻す, 必ず Cyフラグ立つ。
SKIP_ADD:
CCF ; 引けなかった場合 Cy=0, 引けた場合 Cy=1 にする→これが着目桁の商
RL D ; 商を Dレジスタの下位へ。
DJNZ LOOP
LD E,A