jww*_*jww 4 syntax x86 assembly gcc inline-assembly
我正在查看英特尔提供的RDRAND指令参考实现。该页面是英特尔数字随机数生成器(DRNG)软件实施指南,代码来自英特尔数字随机数生成器软件代码示例。
以下是Intel的相关部分。它读取一个随机值并将其放入 中val,并在成功时设置进位标志。
char rc;
unsigned int val;
__asm__ volatile(
"rdrand %0 ; setc %1"
: "=r" (val), "=qm" (rc)
);
// 1 = success, 0 = underflow
if(rc) {
// use val
...
}
Run Code Online (Sandbox Code Playgroud)
Soory不得不问。我认为GNU Extended Assembler中没有涵盖它,并且搜索“=qm”会产生虚假命中。
"=qm"扩展汇编器中的含义是什么?
小智 5
您看到的是内联汇编器约束。GCC 文档位于x86 系列部分下的6.47.3.1 简单约束和6.47.3.4 特定机器的约束。这个 ( ) 结合了三个标志,表示:=qm
=:操作数是只写的 - 其先前的值不相关。q:操作数必须位于寄存器a、b、c或 中(例如,d不能位于 中)。esim:操作数可以放置在内存中。