gcc - 什么是扩展汇编器中的 "=qm"

标签 gcc assembly syntax x86 inline-assembly

我正在查看英特尔提供的 RDRAND 指令的引用实现。页面是Intel Digital Random Number Generator (DRNG) Software Implementation Guide , 代码来自 Intel Digital Random Number Generator software code examples .

以下是英特尔的相关部分。它读取一个随机值并将其放入 val,并在成功时设置进位标志。

char rc;
unsigned int val;

__asm__ volatile(
    "rdrand %0 ; setc %1"
    : "=r" (val), "=qm" (rc)
);

// 1 = success, 0 = underflow
if(rc) {
    // use val
    ...
}

很抱歉不得不问。我不认为它包含在 GNU Extended Assembler 中,并且搜索“=qm”会产生虚假命中。

"=qm" 在扩展汇编器中是什么意思?

最佳答案

您正在查看的是 inline assembler constraint . GCC 文档位于 6.47.3.1 Simple Constraints6.47.3.4 Constraints for Particular Machinesx86 系列 部分下。这个 (=qm) 结合了三个标志,表示:

  • =:操作数是只写的 - 它之前的值不相关。
  • q:操作数必须在寄存器abcd中(例如,它不能在 esi 中)。
  • m:操作数可能放在内存中。

关于gcc - 什么是扩展汇编器中的 "=qm",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21516852/

相关文章:

c++ - 尝试在 Ubuntu 上使用 pthread 时出错

assembly - 是否有使用 AT&T 语法的完整 x86 汇编语言引用?

gcc - 64 位服务器上的 32 位 Fortran

c++ - nullptr_t 是默认的可构造类型吗?

c - 在 gdb 中打印函数宏定义

assembly - 当您需要调用大于 2^32 位的函数时会发生什么?

math - 在我的汇编程序中,我试图计算(((((2 ^ 0 + 2 ^ 1)* 2 ^ 2)+ 2 ^ 3)* 2 ^ 4)+ 2 ^ 5)的等式

python - 了解类内的 python 变量范围

regex - 是否可以更改 emacs 的正则表达式语法?

javascript - 如何将集合转换为数组?