DIV 命令使我的程序挂起。如何避免? (包括短代码。)

DIV command makes my program hang. How to avoid it? (Short code included.)

(处理器英特尔 x86)

.MODEL SMALL

Print   EQU 2
Exit    EQU 4Ch

.DATA ;------------------------------------------------------

a   DW  8
b   DW  2

.CODE ;------------------------------------------------------

Start   PROC

    mov ax, SEG DGROUP
    mov ds, ax

    mov ax, a
    ;div    b <---- uncommenting it makes program hang

    mov dx, ax
    add dx, '0'

    mov ah, Print      
    int 21h
    mov ah, Exit
    int 21h

; -----------------------------------------------------------

Start   ENDP
    .STACK 512

    END Start

如果使用 Turbo 汇编器编译,代码输出 8。 如果我取消注释 DIV 命令,代码将挂起。

用 Turbo Debugger 查看寄存器,我看到 DIV 命令将除法结果发送到 AX 寄存器——存储数字 8 的同一个寄存器将被发送到 DX 到被打印出来。

是什么导致 DIV 挂起我的程序?我是否监督 DIV 将数据放入寄存器中,这些寄存器将被某些重要的后台函数或...某些东西使用?

mov ax, a
;div    b

因为 b 是一个字大小的变量,所以 div b 指令将 DX:AX 除以字 b。你忘了用零设置 DX!除法溢出,触发异常

mov ax, a
xor dx, dx
div b