无法使用 nasm 编译具有 xmmword 操作数大小的汇编代码

2024-01-06

我试图使用编译汇编代码nasm (nasm -o file input.asm)并在以下代码片段的第 2 行抛出错误:

mov rsi, 0x400200
movdqu xmm0,xmmword [rsi]
nop

我不确定是否可以使用 128 位寄存器的指令进行编译nasm但是在涉及 128 位寄存器的情况下,还有其他方法使用 nasm 进行编译吗?


您不需要指定操作数大小对于内存操作数,
just use movdqu xmm0, [rsi]并令 xmm0 表示 128 位操作数大小。
NASM 支持 SSE/AVX/AVX-512 指令。

如果您确实想指定操作数大小,则 128 位的名称为oword, 根据ndisasm如果您汇编该指令,然后反汇编生成的机器代码。 oword = oct-word = 8x 2 字节字 = 16 字节。

  • 字、字和字操作数的大小是多少? https://stackoverflow.com/questions/12063840/what-are-the-sizes-of-tword-oword-and-yword-operands
  • QWORD 之后是什么? https://stackoverflow.com/questions/39645078/what-comes-after-qword

请注意,GNU.intel_syntax noprefix(如所用objdump -drwC -Mintel) will use xmmword ptr,与 NASM 不同。

如果你真的想使用xmmword,%define xmmword oword在你的文件的顶部。

操作数大小是always由所有 SSE/AVX/AVX-512 指令的助记符和/或其他寄存器操作数暗示;我想不出任何需要指定的说明qword vs. oword vs. yword或任何事情,就像你做的那样movsx eax, byte [rdi] vs. word [rdi]。通常它的大小与寄存器相同,但某些随机/插入/提取指令也有例外。例如:

  • SSE2 pinsrw xmm0, [rdi], 3加载一个word并将其合并到 xmm0 的字节 6 和 7 中。
  • SSE2 movq [rdi], xmm0存储 qword 低半部分
  • SSE1 movhps [rdi], xmm0存储高qword
  • AVX1 vextractf128 [rdi], ymm0, 1存储高半部分的 128 位
  • AVX2 vpmovzxbw ymm0, [rdi]是否从 128 位内存源操作数进行压缩字节到字零扩展
  • AVX-512Fvpmovdb [rdi]{k1}, zmm2 https://www.felixcloutier.com/x86/vpmovdb:vpmovsdb:vpmovusdb将双字缩小为字节元素(进行截断;其他版本进行饱和)并进行 128 位存储,并以字节粒度进行屏蔽。 (除了传统的 SSE 之外,在没有 AVX-512BW 的情况下进行字节粒度屏蔽的唯一方法之一maskmovdqu它具有缓存驱逐 NT 语义。所以我想这对于 Xeon Phi KNL 来说特别有趣。)

You could指定oword在其中任何一个上,以确保内存访问的大小是您认为的大小。 (即让 NASM 为您检查。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法使用 nasm 编译具有 xmmword 操作数大小的汇编代码 的相关文章

  • 为什么 RISC-V S-B 和 U-J 指令类型以这种方式编码?

    我正在读一本书 计算机组织与设计RISC V版 我遇到了 S B 和 U J 指令类型的编码 我上面提到的那些类型有奇怪的编码立即字段 S B 类型将直接字段分为两部分 这是有道理的 因为所有指令编码都必须相似 但我无法理解为什么立即字段以
  • 为什么当大小大于 50 时,该程序花费的时间会呈指数级增长?

    所以我正在为类编写一个 ARM 汇编快速排序方法 我对大部分内容都有了解 除了复杂性没有意义 我们将其与我们制作的另一种冒泡排序方法进行比较 它对于具有 1 个参数和 10 个参数的示例表现更好 然而 我什至无法比较 100 个参数测试 因
  • 如何知道寄存器是否是“通用寄存器”?

    我试图了解寄存器必须具备什么标准才能被称为 通用寄存器 我相信通用寄存器是一个可以用于任何用途的寄存器 用于计算 将数据移入 移出等 并且是一个没有特殊用途的寄存器 现在我读到了ESP寄存器是通用寄存器 我猜是ESP寄存器可以用于任何事情
  • 从 NASM 调用 C 函数 _printf 会导致分段错误

    我一直在尝试使用 NASM 在 Mac OS 和 Windows 上学习 64 位汇编 我的代码是 extern printf section data msg db Hello World 10 0 section text global
  • 使用 NEON 优化 Cortex-A8 颜色转换

    我目前正在执行颜色转换例程 以便从 YUY2 转换为 NV12 我有一个相当快的函数 但没有我预期的那么快 主要是由于缓存未命中 void convert hd uint8 t orig uint8 t result uint32 t wi
  • 程序集比较标志理解

    我正在努力理解汇编程序中的以下代码片段 if EAX gt 5 EBX 1 else EBX 2 在汇编程序中 可以写如下 根据我的书 模拟jge操作说明 https www felixcloutier com x86 jcc您通常会使用
  • 阴影空间示例

    EDIT 我接受了下面的答案 并添加了我自己的代码的最终修订版 希望它向人们展示影子空间分配的实际示例 而不是更多的文字 编辑 2 我还设法在 YouTube 视频 所有内容 的注释中找到了一个调用约定 PDF 的链接 其中有一些关于 Li
  • 设置 IRQ 映射

    我正在遵循一些教程和参考文献来尝试设置我的内核 我在教程中遇到了一些不熟悉的代码 但根本没有解释它 这是我被告知映射的代码16 IRQs 0 15 到 ISR 地点32 47 void irq remap void outportb 0x2
  • 为什么 clang 使用 -O0 生成低效的 asm(对于这个简单的浮点和)?

    我正在 llvm clang Apple LLVM 版本 8 0 0 clang 800 0 42 1 上反汇编此代码 int main float a 0 151234 float b 0 2 float c a b printf f c
  • 大数组上的 SSE 性能较慢

    我是 SSE 编程新手 所以我希望有人可以帮助我 我最近使用 GCC SSE 内在函数实现了一个函数来计算 32 位整数数组的总和 下面给出了我的实现代码 int ssum const int d unsigned int len stat
  • 是否可以在VM内使用VMX CPU指令?

    VM guest 内部的进程是否有可能使用 VMX AMD V VT x CPU 指令 然后由外部 VMM 处理而不是直接在 CPU 上处理 Edit 假设外部VM使用VMX本身来管理其虚拟客户机 即它在Ring 1中运行 如果可能的话 是
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 长多字节 NOP:通常理解的宏或其他符号

    x86 和 x86 64 处理器不仅具有单字节 这不是什么大秘密NOP指令 还包括各种类型的多字节类 NOP 指令 这些是我设法找到的 AMD 推荐 参考 AMD 系列 15h 处理器的 AMD 软件优化指南 文档 47414 http s
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • 为什么在展开的 ADD 循环内重新初始化寄存器会使其运行速度更快,即使循环内有更多指令?

    我有以下代码 include
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我
  • 汇编器8086将32位数字除以16位数字

    我尝试将 32 位数字除以 16 位数字 例如 10000000h 除以 2000h 根据我尝试做的设计除以 右 4 位数字除以除数 然后左 4 位数字除以除数 这是我的代码 DATA num dd 10000000h divisor dw
  • 使用 Gas 生成与位置无关的代码 (-fPIC)

    我尝试在 x86 64 上创建共享库但失败 问题归结为以下代码 请不要介意 它没有多大意义 section data newline ascii n section text globl write newline type write n

随机推荐

  • Firefox 中可点击的电话协议标签

    我有一个非常标准的电话号码标签 它适用于一切except火狐 我认为电话协议是标准的 有我不知道的解决方法吗 a class tel href 800 123 4567 a 火狐浏览器错误信息 地址不明白 Firefox 不知道如何打开此地
  • java 中最好的 XML 解析库是哪个 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Rails 范围查找当前用户

    我使用 Rails 3 和 Devise 进行用户身份验证 假设我有一个启用了 Devise 的用户模型和一个产品模型 并且用户有很多产品 在我的产品控制器中 我希望我的 find 方法的范围由 current user 确定 即 prod
  • 为什么 Heroku 会给出权限被拒绝的错误?

    When git clone v email protected cdn cgi l email protection testabcde git Cloning into testabcde Heroku 回归 Permission de
  • 角度 2 不透明令牌

    需要一些有关提供 OpaqueToken 的帮助 使用 Angular 2 beta 12 如果提供程序密钥是字符串 则它可以正常工作 但在使用 OpaqueToken 时则不起作用 在 Child 类中 SF 未定义 家长班级 expor
  • 如何计算时间加权平均值并创建滞后

    我搜索了论坛 但没有找到任何可以回答或提供如何在论坛上做我想做的事情的提示 我有每年的暴露数据测量 我希望根据每个人参与研究的情况来计算个人水平的年平均值 对于每一行 一年暴露分配应包括从加入研究前最后一个月开始的前 12 个月的数据 例如
  • 从内存中扩充 XML 文件

    我复制了一个 XML 文件 assets到我的应用程序数据文件夹 data data package name files 我这样做是因为用户将能够修改大量数据 并且我想将该数据保存到内部存储器中 然后在重新启动应用程序时再次加载 这一切都
  • 如何为 Chrome 设置可调试标志?

    官方教程里有https github com phonegap phonegap wiki Debugging in PhoneGap https github com phonegap phonegap wiki Debugging in
  • 如何将完整的 PartCover 结果纳入 TeamCity 5?

    我正在尝试在 TeamCity 5 0 中正确生成 PartCover 报告 当我单击构建详细信息中的 代码覆盖率 选项卡时 报告为空 我正在使用 sln2008 构建代理 我的 PartCoverage 设置如下 包括模式 报告 XSLT
  • Mat::checkVector 在 OpenCV 中做什么?

    我尝试在 OpenCV C 中使用以下函数 calcOpticalFlowPyrLK prev frame gray frame gray points 0 points 1 status err winSize 3 termcrit 0
  • 如何使用 ShaderModifier 更改 SCNGeometry 中特定三角形的颜色

    首先 在继续之前 我已经阅读了 SceneKit 使用纹理坐标在纹理上绘制 https stackoverflow com questions 26129111 ios8 scenekit painting on texture with
  • 如何在VB 6.0中恢复为imagelist控件上传的图像

    我有一个 VB 6 0 应用程序 其中包含图像列表控件内的一些图像 我想知道这些图像存储在系统中的位置 因为我想在另一个应用程序中使用这些图像 并且系统中没有单独的图像 因此 唯一的方法是从 Visual Basic 6 0 项目中获取图像
  • 使用 UIImageRenderingModeAlwaysTemplate 从界面生成器对 UIButton 的图像进行着色

    我有一个UIButton whose image我从界面生成器设置的属性 我希望这张图片带有超级视图的色彩tintColor 通过代码 我可以将图像的渲染模式设置为UIImageRenderingModeAlwaysTemplate 但是我
  • Silverlight:如何处理标准程序集(第 2 部分)

    有必要将 标准 程序集移出 xap 文件 Silverlight 4 应用程序 我有一个类似的问题 Silverlight 如何处理标准程序集 https stackoverflow com questions 3329731 silver
  • 如何检查字符串是否在不同位置包含多个单词

    所以我有多个像这样的字符串 字符串 1 There这是我想做但我没有做的一件事吗idea how 字符串2 我真的不知道如何解决它 字符串 2 希望有人可以帮助我 现在我还有一个字符串 它是搜索输入 可以是任何内容 例如 有想法 当用户输入
  • Google Analytics 中的 Invalid_grant

    我正在使用 Java 运行 Analytics cmdline sample 应用程序 我使用的是 Maven 2 2 1 我在 Google Api 控制台中创建了 client Id 和 client secret 我已确保在我的 Go
  • 在 UILabel iphone 中显示 HTML 文本

    我从网络服务获取 HTML 响应 以下是我收到的响应 HTML p strong Topic strong Gud mrng p n p strong Hello Everybody strong How are you p n p str
  • 在 Visual Studio 2012 *Express* 桌面上更改主题等

    有没有人设法修复 Visual Studio 2012 for Windows Desktop Express 版本上的主题 我已经尝试过适用于付费版本的解决方案 如另一个中所述堆栈溢出问题 https stackoverflow com
  • 使用 Maven 自动部署保存 Netbeans 企业项目

    我有一个NetBeansMavenized 项目包含 web project war ejb project jar parent project maven project 每次更改后 我必须清理构建 Maven 项目并运行父项目 如何将
  • 无法使用 nasm 编译具有 xmmword 操作数大小的汇编代码

    我试图使用编译汇编代码nasm nasm o file input asm 并在以下代码片段的第 2 行抛出错误 mov rsi 0x400200 movdqu xmm0 xmmword rsi nop 我不确定是否可以使用 128 位寄存