当前位置: 首页 > 知识库问答 >
问题:

扩展汇编程序中的“=qm”是什么

邢星波
2023-03-14

我正在查看英特尔提供的RDRAND指令的参考实现。页面是英特尔数字随机数生成器(DRNG)软件实现指南,代码来自英特尔数字随机数生成器软件代码示例。

以下是英特尔的相关部分。它读取一个随机值并将其置于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"是什么意思?

共有3个答案

狄信然
2023-03-14

哇,一开始这让我很困惑,但我四处搜索了一下,发现这是对这段代码所针对的处理器模型的引用。

有趣的是,我读到它是为i7 Quadcore设计的。

你是从那里得到这个密码的?

它是变量语法的简单值指示器。

靳彦
2023-03-14

qm可能意味着1字节8位mem=qm将是存储1字节结果的有效约束查看setc想要什么

http://web.itu.edu.tr/~aydineb/index\u files/instr/setc。html

reg8和mem8

我们只知道eax, ebx edx ecx... a, b, c, d可以使用q引用的寄存器,因为它们可以使用低字节al dl cl访问...结合qm,我们得到mem8. m意味着内存。这就是我的意思

刘弘新
2023-03-14

您所看到的是内联汇编程序约束。GCC文档位于6.47.3.1“简单约束”和6.47.3.4“x86系列下特定机器的约束”部分。这个(=qm)组合了三个标志,指示:

  • <代码>= :操作数是只写的-其以前的值不相关

 类似资料:
  • 我是android的新手,但我仍然不明白什么是Java中的扩展。

  • GCC扩展内联汇编 使用GCC扩展内联汇编的例子如下: #define read_cr0() ({ \ unsigned int __dummy; \ __asm__( \ "movl %%cr0,%0\n\t" \ :"=r" (__dummy)); \ __dummy; \ }) 它代表什么含义呢?这需要从其基本格式讲起。GCC扩展内联汇编的基本格式是: asm [volat

  • 扩展是可定制化浏览体验的小程序,它们使用户可以根据个人需要或者偏好定制 Chrome 的功能和行为。它们基于 Web 技术(例如 HTML,JavaScript 和 CSS)构建。 扩展必须满足狭义定义且易于理解的单一目的(译者注:功能简单易懂化)。一个扩展可以包括多个组件和一系列功能,只要所有的内容都有助于实现共同的目标。 用户交互界面应尽量小且有意图。他们的范围从简单的图标,如右侧显示的 Go

  • 我阅读了Kip IRVINE的《x86处理器的汇编语言》一书,他写道: 将较小的值复制到较大的值 虽然MOV不能直接将数据从较小的操作数复制到较大的操作数,但程序员可以创建变通方法。假设计数(无符号,16位)必须移动到ECX(32位)。我们可以将ECX设置为零,并将计数移动到CX: 如果我们用一个等于-16的有符号整数尝试相同的方法,会发生什么? ECX(65,520)中的值与-16完全不同。另一

  • Flarum 是简约的,同时也是高度可扩展的。实际上,Flarum 附带的大部分功能都是扩展程序。 这种方法使得 Flarum 具有极高的可定制性。您可以禁用任何您不需要的功能,并安装其他扩展,打造更适合您的社区。 如果您想了解更多关于 Flarum 的理念,我们在核心中包含了哪些功能,或者您想制作自己的扩展,请查看我们的 扩展文档。 本文将重点讨论从论坛管理员的角度管理扩展。 Flarum 有一

  • 问题内容: 我想创建一个Google Chrome扩展程序。具体来说,我想制作一个打包的应用程序,而不是一个托管的应用程序。我认为这限制了我使用JavaScript(和HTML / CSS)是否正确? 我的问题是我需要做一些复杂的数学运算(奇异值分解,因子分析),并且我不想在javascript中为此编写算法。Python已经有了我需要的功能的库(SciPy),但是我找不到任何可以使用python