【发布时间】:2010-12-27 19:03:28
【问题描述】:
在阅读 GNU 项目中的一些源代码时,我遇到了以下内联汇编:
__asm__ (
"divq %4"
: "=a" (q), "=d" (r)
: "0" (n0), "1" (n1), "rm" (d)
);
这里的变量q、r、n0、n1和d是64位整数。我知道足够多的程序集来了解它的作用,但有些细节我不确定。
我的理解:
我们将 RAX 寄存器的内容除以 d,将商放入 q,将余数放入 r。
我不明白的地方
- 为什么有 三个 输入 这里?我们只需要输入一个 被除数和除数,那有什么用 可以有 3 个输入吗?
- 我不知道哪个输入是股息。更一般地说,我实际上什么也没看到 被加载到 RAX 寄存器中, 那么它是如何知道除以什么的呢?
【问题讨论】:
-
+1 个格式正确的问题。我喜欢“我明白的”和“我不明白的”部分。
标签: c gcc x86 inline-assembly division