【问题标题】:ASSEMBLY 64 bit by 64 bit division组装 64 位乘 64 位除法
【发布时间】:2013-06-20 15:15:22
【问题描述】:

如何在 Assembly 8086 中实现 64 位乘 64 位除法? 我已经使用 .386 指令启用了扩展寄存器。

【问题讨论】:

  • 您的程序将在 32 位还是 64 位模式下运行?即,是否允许使用 x86-64 指令?
  • 我使用 DosBox....可能我不明白你的问题。
  • 你能解释一下吗?
  • dosbox 是一个 16 位 x86 环境。后来的架构扩展到 32 位和 64 位

标签: assembly 64-bit division x86-16


【解决方案1】:

x86 知道 64 x 32 位除法,余数和商为 32 位结果 像这样

POP     EBX      ;DIVISOR
POP     EDX      ;MSW OF DIVIDEND
POP     EAX      ;LSW OF DIVIDEND
DIV     EBX      ;64/32 BIT DIVIDE
PUSH    EDX      ; remainder
PUSH    EAX      ; quotient

您不想除以不适合 32 位的 64 位数字,因为您会损失至少 10 位的精度。

如果你坚持下去, 你可以从中组成一个 64/64 的除法,然后再分析你是否真的做到了。

如果您知道如何将 2 位十进制数除以 2 位十进制数(长除法),则可以使用上述方法将 2 位 2^32 基数除以 2 位 2^ 32个基数。这留给读者作为练习。

【讨论】:

  • 重要的是要提到 64/32 => 如果商不适合 EAX,32 位除法会引发 #DE 异常。所以只有当 EDX
  • @peter,评论无关紧要,因为如果你做长除法,商的下一个数字总是(你猜对了)一个数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
相关资源
最近更新 更多