我正在尝试解决一个问题,从键盘读取实数,将 pi 添加到其中,然后将其写入文件中。一切都很顺利,直到我到达 div 并出现 Divide by 0 错误。这是有问题的代码部分:
mov ax, frac
div ten
Run Code Online (Sandbox Code Playgroud)
frac 是一个类似 234f 的词,我通过 Turbo 调试器运行它,ax 得到值 234f,十在数据段中定义为一个字节,如下所示
ten db 10
Run Code Online (Sandbox Code Playgroud)
在 Turbo 调试器中,当我到达这里时,在 div 10 中,它会将我带入 div 函数的内部结构,并最终发送 Divided by 0 错误。
我必须提到的是,就在之前我做了另一个 div,在另一个变量上完全相同,一切都很完美。div 函数还有其他我不知道的含义吗?如果需要的话我可以发布所有代码,但是代码很长,我不知道你是否能理解。
您实际上得到的是溢出,而不是被零除(但这是相同的异常)。问题是您的除法产生 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
Run Code Online (Sandbox Code Playgroud)
有关各种形式的工作方式,请参阅指令集参考div。
| 归档时间: |
|
| 查看次数: |
3838 次 |
| 最近记录: |