我不知道除法中溢出的确切定义是什么。你能先解释一下,然后通过下面的例子来指导吗?
例如我的书上写过这段代码导致溢出。不知道为什么??
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)
那么为什么第一个结果变成溢出而第二个结果不是有什么区别呢?
在寄存器中的分红DX和AX事实上是一个32位的号码,在你的例子是00876002h。
它将除以除数BX,结果(商)应适合 register AX。无符号除法后的余数将放入寄存器DX。
当您尝试除以( )00876002h的内容时,结果为余数为 2。现在您应该明白为什么会触发错误:商太大而无法放入 16 位寄存器。BX10h87600h87600hAX
当除数太小时会发生除法溢出(别名除以零)。您的示例将在BX低于时溢出DX。