0

私はWindows 7で作業していますが、dosboxでもコードを試しています

16ビットモードでダブルワードをワードごとに割るにはどうすればよいのだろうか

私はファスムを使っています。そして.comファイルを作る

次のコードは正しく実行されますが、dx が 0 より大きい場合にエミュレーション ウィンドウをシャットダウンするだけです

org 100h
mov dx, 0
mov ax, 10
mov bx, 10
div bx
add ax, '0'
int 29h   
mov ax, 00h
int 16h
mov ax, 4c00h
int 21h

次のようにコードを変更すると、dx が 0xf を超えるとシャットダウンします。理由はわかりません。

org 100h
mov dx, 0xf
mov ax, 10
div word [divby]
add ax, '0'
int 29h
mov ax, 00h
int 16h
mov ax, 4c00h
int 21h
divby:
        dw 0x10           

バグをシャットダウンせずにダブルワードをワードごとに分割するにはどうすればよいですか?

4

1 に答える 1

3

「シャットダウン」または除算オーバーフロー例外は、dx:ax / bx が ax に収まらない場合 (または 0 で除算する場合) に発生します。

aa:bb:cc:dd に「大きな」値があると仮定すると、bx で除算するには、次の手順を実行する必要があります。

 lea si,[aa]
 lea di,[result]
 mov dx,0
 mov cx,4
 again:
 lodsw      ;; load ax
 div bx
 stosw      ;; store result of division
 loop again
 ;; at this point dx will contain the remainder of the big_int % bx
于 2013-01-11T06:51:16.633 に答える