我正在尝试解决从键盘读取实数的问题,将pi添加到它然后将其写入文件中。一切都很好,直到我到达div并且我得到Divide by 0错误。这是问题的代码部分:
mov ax, frac
div ten
frac是一个像234f这样的词,我通过turbo调试器运行它,ax获得值234f,十个在数据段中定义为像这样的字节
ten db 10
在turbo调试器中,当我到达这里时,在div 10中,它将我带入div函数的内部结构并最终发送Divided by 0错误。
我必须在之前提到我做了另一个div,在另一个变量上完全一样,一切都很完美。 对于我不知道的div函数还有其他含义吗?如果有必要,我可以发布所有代码,但这很长,我不知道你是否理解它。
答案 0 :(得分:4)
你实际上是溢出,而不是零除(但它是相同的例外)。
问题是你的除法产生了8位结果,你的输入是AX=375Fh=18271
,除以10
得到1827
并且不符合8位。 (来自您的屏幕截图,但AX=234F
也类似。)
如果需要16位结果,则必须使用32位除法。注意零扩展输入和除数。例如:
xor dx, dx ; zero extend ax
div ten ; divide dx:ax by ten (use word override if necessary)
; quotient now in ax, remainder in dx
...
ten dw 10 ; notice it is a word
查阅关于各种形式div
如何工作的指令集参考。