使用DX:AX组装x86分区

时间:2011-11-01 17:24:09

标签: assembly x86 masm

我正在使用masm,我遇到了一个我不太明白如何解决的场景,例如:

X = (A)/(C*D)

如果我首先使用多个C * D,我的值是DX:AX,据我所知,我不能将其用作除数。如果我分开作为A / C和A / D进行划分,我会冒失去精确度的风险(来自提醒等)。实现这个的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

正如您所正确注意的那样,您不能使用32位数作为16位除法中的除数,但由于我们只对整数除法感兴趣,这不是问题。

有两种情况需要考虑(对于无符号划分):

  • DX == 0C*D的结果符合16位,因此我们可以正常使用ax作为16位除数。
  • DX > 0DX != 0):C*D大于65335(0xFFFF)和16位无符号除A,且该数字将始终为为0,余数只为A

或者你可以用C做,并假设C*D的结果符合16位。 :)