【问题标题】:nasm x86-64 bit divisionnasm x86-64 位除法
【发布时间】:2012-01-13 02:33:07
【问题描述】:

我正在尝试用汇编语言进行划分

我在网上找不到一个很好的例子来说明如何划分为 64 位。

到目前为止,我在两个变量中有 2 个值

input
input2

在哪里读到

我可以很好地乘法,但我被困在除法上

所以如果我不想将两个整数相除,我正在做

mov rcx, [input]

mov rdi, [input2]

idiv rcx, rdi

这会自动给 sme 一个错误,因为除法假设只有一个寄存器,所以我假设在使用 idiv 时,它会自动将一些寄存器除以您指定的寄存器,所以我尝试了

idiv rcx

但我收到“浮点错误”

想法?

【问题讨论】:

  • 您的问题被标记为 [floating-point],但您说的是整数除法。是哪个?

标签: floating-point x86-64 nasm inline-assembly


【解决方案1】:

快速浏览documentation 会发现涉及 64 位数字的两种除法可能性:

IDIV r/m32

EDX:EAX 除以 r/m32 有符号,结果存储在 EAX ← 商,EDX ← 余数中。

IDIV r/m64

有符号将 RDX:RAX 除以 r/m64,结果存储在 RAX ← 商,RDX ← 余数中。

不过,这将是整数除法。你的问题被标记为浮点 - 如果你想要浮点除法,你需要FDIV 指令的变体之一。

【讨论】:

  • 好的....所以我是否将整数加载到 rdx 和 rax 中,然后当我除法时我会执行 idiv rax?
  • 不,你需要idiv REGISTER_YOU_WANT_TO_DIVIDE_BY。使用 RDXRAX 是行不通的,因为那是你的红利所在。
猜你喜欢
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 2012-02-10
  • 2011-11-19
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
相关资源
最近更新 更多