我正在查看英特尔提供的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
...
}
Soory要问。我认为它不在GNU Extended Assembler中,并且搜索“= qm”会产生虚假命中。
扩展汇编程序中"=qm"
的含义是什么?
答案 0 :(得分:4)
你所看到的是inline assembler constraint。 GCC文档位于 x86系列部分下的6.47.3.1 Simple Constraints和6.47.3.4 Constraints for Particular Machines。这一个(=qm
)组合了三个标志,表示:
=
:操作数是只写的 - 它的先前值不相关。q
:操作数必须在注册a
,b
,c
或d
(不能在esi
中,例如)。m
:操作数可以放在内存中。答案 1 :(得分:2)
qm可能意味着1字节8位mem = qm将是存储1字节结果的有效约束 看看setc想要什么
http://web.itu.edu.tr/~aydineb/index_files/instr/setc.html
reg8和mem8
因为我们只知道eax,ebx edx ecx .. a,b,c,d寄存器可以使用q refer因为它们可以用低字节al dl cl访问...结合qm我们得到mem8。我的意思是记忆。这就是我的意思
答案 2 :(得分:-2)
我一直认为它适用于i7 Quadcore。
这是你从这里得到这些代码的地方吗?
它是变量语法的简单值指示器。