汇编中除法溢出(8086)

jac*_*ath 1 assembly x86-16

我不知道除法中溢出的确切定义是什么。你能先解释一下,然后通过下面的例子来指导吗?

例如我的书上写过这段代码导致溢出。不知道为什么??

mov dx,0087h
mov ax,6002h
mov bx,10h
div bx
Run Code Online (Sandbox Code Playgroud)

但是这段代码是正确的,不会导致溢出:

mov dx,0087h
mov ax,6000h
mov bx,100h
div bx
Run Code Online (Sandbox Code Playgroud)

那么为什么第一个结果变成溢出而第二个结果不是有什么区别呢?

vit*_*oft 6

在寄存器中的分红DXAX事实上是一个32位的号码,在你的例子是00876002h
它将除以除数BX,结果(商)应适合 register AX。无符号除法后的余数将放入寄存器DX

当您尝试除以( )00876002h的内容时,结果为余数为 2。现在您应该明白为什么会触发错误:商太大而无法放入 16 位寄存器。BX10h87600h87600hAX

除数太小时会发生除法溢出(别名除以零)。您的示例将在BX低于时溢出DX