H8/3048・お笑い集(プログラム中の勘違い等の一覧です。)

連続して割り算を2回行う場合(100000/123/123=539 余り 52 ?)

divxu.wの計算結果は余りと商でありその二つを割り算しようとしている。

mov.l #100000,er0

mov.w #123,r1

divxu.w r1,er0 ;100000/123=813 余り 1 e0=1 r0=813 er0=66349

正解はここでr0をer0に符号拡張してください。extu.l er0

divxu.w r1,er0 ;66349/123=539 余り 52(符号拡張した場合は6 余り 75である)

ただし、1回目の割り算で余りが出ない場合は正常に動きます。

divxu.w 命令は32bit÷16bit=商 16bit 余り 16bit ちなみに商が16bitに収まるように範囲は考えてください。