我正在使用masm,我遇到了一个我不太明白如何解决的场景,例如:
X = (A)/(C*D)
如果我首先使用多个C * D,我的值是DX:AX,据我所知,我不能将其用作除数。如果我分开作为A / C和A / D进行划分,我会冒失去精确度的风险(来自提醒等)。实现这个的最佳方法是什么?
答案 0 :(得分:3)
正如您所正确注意的那样,您不能使用32位数作为16位除法中的除数,但由于我们只对整数除法感兴趣,这不是问题。
有两种情况需要考虑(对于无符号划分):
DX == 0
:C*D
的结果符合16位,因此我们可以正常使用ax
作为16位除数。DX > 0
(DX != 0
):C*D
大于65335(0xFFFF
)和16位无符号除A
,且该数字将始终为为0,余数只为A
。或者你可以用C做,并假设C*D
的结果符合16位。 :)