在 JWASM/MASM 中 - pshufw 产生错误 A2030:当前 CPU 模式下不接受指令或寄存器

2023-12-05

我有以下汇编程序,在编译时出现错误:

.686
.mmx
.model flat,c
.code

MmxAdd  proc
    push ebp
    mov ebp,esp

    mov eax, [ebp+24]        
    cmp eax, AddOpTableCount      
    jae BadAddOp                

    movq mm0,[ebp+8]             
    movq mm1,[ebp+16]       
    jmp [AddOpTable+eax*4]       

MmxPaddb:
    paddb mm0,mm1            
    jmp SaveResult

MmxPaddsb:
    paddsb mm0,mm1               
    jmp SaveResult  

MmxPaddusb:
    paddusb mm0,mm1             
    jmp SaveResult

MmxPaddw:
    paddw mm0,mm1             
    jmp SaveResult

MmxPaddsw:
    paddsw mm0,mm1             
    jmp SaveResult  

MmxPaddusw:
    paddusw mm0,mm1           
    jmp SaveResult

MmxPaddd:                       
    paddd mm0,mm1
    jmp SaveResult

BadAddOp:
    pxor mm0,mm0

SaveResult:
    movd eax,mm0                   
    pshufw mm2,mm0, 01001110b       
    movd edx,mm2                   
    emms                           

    pop ebp
    ret

    align 4                                            

AddOpTable:
    dword MmxPaddb, MmxPaddsb, MmxPaddusb
    dword MmxPaddw, MmxPaddsw, MmxPaddusw
    dword MmxPaddd

AddOpTableCount equ ($-AddOpTable) / size dword

MmxAdd  endp
    end

但每次我尝试使用 JWASM 编译它时,都会收到以下错误:

Mmx_Addition.asm(51) : 错误 A2030: 当前 CPU 模式下不接受指令或寄存器

这是给我错误的指令:

pshufw mm2,mm0, 01001110b

我该如何解决这个问题?


pshufw被认为是SSE(SSE-1)指令。该指令被认为是 MMX 的扩展,又名MMXEXT,要使用它,您必须使用以下命令启用 SSE.xmm指令而不是.mmx。这应该有效:

.686
.xmm
.model flat,c
.code

.xmm也暗示着.mmx所以你不需要两者。如果你同时使用的话.mmx必须先来.xmm。我不建议同时使用两者。


作为 SSE-1 的 MMX 扩展添加的其他指令是:

  • PINSRW

    将通用寄存器中的 16 位值插入到四个元素之一(由立即数指定)

  • PEXTRW

    将四个元素之一(由立即数指定)提取到通用寄存器

  • PMULHU

    将四个 16 位无符号元素相乘,返回每个元素的最高有效 16 位

  • PSHUFW

    在 8 位立即数掩码的控制下对 16 位元素进行完全洗牌

  • PMOVMSB

    将由字节元素的 MSb 组成的 8 位掩码移至通用寄存器

  • PAVGB

    字节元素的平均值 (Di = –(Di+ Si + 1)/2, i = 0…7)

  • PAVGW

    16 位元素的平均值 (Di = –(Di + Si + 1)/2, i = 0…3)

  • PSADBW

    16 位元素的差值绝对值之和 (D1,0 = Σi=0…3 |Di – Si|)

  • PMINSW

    有符号 16 位元素的最小值

  • PMINUB

    无符号字节元素的最小值

  • PMAXSW

    有符号 16 位元素的最大值

  • PMAXUB

    无符号字节元素的最大值


你必须使用.686(或稍后)旁边.xmm for .xmm指令按预期工作。

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

在 JWASM/MASM 中 - pshufw 产生错误 A2030:当前 CPU 模式下不接受指令或寄存器 的相关文章

  • 弹出 x86 堆栈以访问函数 arg 时出现分段错误

    我正在尝试链接 x86 程序集和 C 我的C程序 extern int plus 10 int include
  • 程序集比较标志理解

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

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

    我不明白这段代码 mov ax 07C0h Set up 4K of stack space above buffer add ax 544 8k buffer 512 paragraphs 32 paragraphs loader cli
  • AVX-512 指令编码 - {er} 含义

    在 Intel x86 指令集参考中 有许多 AVX 512 指令在指令中具有可选的 er 例如 VADDPD 的一种形式定义为 EVEX NDS 512 66 0F W1 58 r VADDPD zmm1 k1 z zmm2 zmm3 m
  • 设置 IRQ 映射

    我正在遵循一些教程和参考文献来尝试设置我的内核 我在教程中遇到了一些不熟悉的代码 但根本没有解释它 这是我被告知映射的代码16 IRQs 0 15 到 ISR 地点32 47 void irq remap void outportb 0x2
  • 如何在程序中将自己缝合到自己的尾部,无限循环地封装 64KB 代码段?

    如果指令的顺序执行经过偏移量 65535 则8086将从同一代码段中的偏移量 0 处获取下一个指令字节 接下来的 COM 程序利用这一事实 不断将其整个代码 总共 32 个字节 缝合到自己的尾部 环绕在 64KB 代码段中 你可以称之为二元
  • 如何编译GCC生成的asm?

    我正在玩一些汇编代码 有些事情困扰着我 我编译这个 include
  • 在 x86 程序集中存储大量布尔值的最佳方法是什么?

    最近我一直在处理充满布尔值的大型数组 目前 我将它们存储在 bss部分有一个 space指令 它允许我创建字节数组 但是 由于我只需要存储布尔值 因此我希望从数组中逐位读取和写入数据 目前 我能想到的最好方法是有一个 space指令所需存储
  • LC3 LEA指令和存储的值

    我对这个问题感到困惑 指令后寄存器0中存储的值是多少 LEA R0 A 被处决了吗 为什么答案是x370C 我认为应该将A的地址加载到R0中 如果是这样我们怎么知道地址 有人可以帮忙吗 非常感谢 ORIG X3700 LEA R0 A LD
  • 错误 LNK2019:函数 main 中引用的外部符号无法解析

    我正在尝试在 C 中运行我的简单汇编代码 我只有两个文件 cpp 文件和 asm 文件 编译时出现错误 见下文 如果有人可以提供帮助 我将不胜感激 这是我的 main cpp 文件 include
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • NASM 中的 equ 和 db 有什么区别?

    len equ 2 len db 2 它们是否相同 产生可以用来代替的标签2 如果不是 那么每种申报表的优点或缺点是什么 它们可以互换使用吗 第一个是equate 与 C 类似 define len 2 因为它实际上并没有在最终代码中分配任
  • 为什么在展开的 ADD 循环内重新初始化寄存器会使其运行速度更快,即使循环内有更多指令?

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

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • SIMD 和 VLIW 指令是一样的吗?

    SIMD 单指令多数据 和 VLIW 超长指令字 到底有什么区别 其中一个是另一个的子集吗 或者它们是两个完全不同的东西 完全不相关且正交 一台机器可以有一个或两个 或者两者都没有 SIMD 指令可以作为扩展添加到 VLIW ISA 但 V
  • 为什么X86中没有NAND、NOR和XNOR指令?

    它们是您可以在计算机上执行的最简单的 指令 之一 它们是我亲自实施的第一个指令 执行 NOT AND x y 会使执行时间和依赖链长度和代码大小加倍 BMI1 引入了 andnot 这是一个有意义的补充 是一个独特的操作 为什么不是这个问题
  • SSE:跨页边界的未对齐加载和存储

    我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • Intel:序列化指令和分支预测

    英特尔架构开发人员手册 http www intel com content www us en architecture and technology 64 ia 32 architectures software developer v

随机推荐

  • Lasagne 与 Theano 可能版本不匹配(Windows)

    所以我终于设法让 theano 启动并在 GPU 上运行this指导 测试代码运行良好 告诉我它使用了 GPU 耶 然后我想尝试一下并遵循this数字识别 CNN 训练指南 问题是 我从烤宽面条调用 theano 的方式中收到错误 我猜这里
  • 有没有办法进行内联多值比较?

    我什至觉得问这个问题很愚蠢 因为这看起来很微不足道 但我的大脑却让我失望了 如果我有以下内容 let a b c 1 1 1 有没有一种优雅的方法来确定 a b 和 c 是否都具有相同的值 就像是 let result a b c 这会失败
  • python中如何检查两个字符串是否有交集?

    例如 a abcdefg b krtol 它们没有交集 c hflsfjg 则a和c有交集 检查这个最简单的方法是什么 只需要一个 True 或 False 结果 def hasIntersection a b return not set
  • 使用powershell登录后如何从网站获取表数据?

    我的公司希望我从他们的内部网站获取数据 对其进行组织 然后将其发送到数据库 数据显示在您在站点内导航到的表格上 我想将这些字段提取到文件或内存中以进行进一步处理 到目前为止 我可以通过获取提交登录按钮的 ID 并传递我的用户名 密码来在 p
  • ffmpeg通过python子进程无法找到相机

    这里有一个奇怪的问题 我使用这个命令通过 ffmpeg 捕获我的网络摄像头 通过 Windows 上的 cmd ffmpeg y t 300 rtbufsize 1024M f dshow i video Lenovo EasyCamera
  • 视图需要相互依赖的逻辑:没有模型是否可行?

    我正在尝试编写一些 Oracle 11g SQL 但遇到了一些先有鸡还是先有蛋的问题 我正在寻找类似电子表格的行为 我找到了一个使用 Oracle 的解决方案MODEL条款 但性能并不好 所以我想知道是否 非MODEL 解决方案在技术上甚至
  • 在 django 项目中导入应用程序

    我在 django 项目中的另一个应用程序中导入应用程序时遇到问题 我知道有几个关于这个主题的问题 asnwsers 相信我 我读了很多 甚至还有一些关于 python import 的 这是我的项目树 我将放置真实的文件夹名称 was f
  • 将 URL 变量传递到 xsl 中

    是否可以将 URL 变量传递到 xsl xml 中 例如 http www somedomain com index aspx myVar test myVar2 anotherTest 我希望能够在 xsl 文件的逻辑中使用 myVar
  • 在 Nifi 中从 Avro Schema 创建 Postgresql 表

    使用 InferAvroSchema 我获得了文件的 Avro 架构 我想使用此 Avro 架构在 PostregSql 中创建一个表 我必须使用哪个处理器 我使用 GetFile gt InferAvroSchema gt 我想从此架构创
  • ItemsControl 调整大小时边框消失(使用“stretchpanel”)

    昨天我问如何让 ItemsControl 使其子项均匀分布在可用空间中 在愉快地阅读答案后 我写了 实际上是复制并调整了它 我自己的 stretchpanel 它正是我想要的 然而 我的孩子应该在右侧有一个边框 只要孩子比其内容大 它就可以
  • 与 python pandas 中的melt相反

    我不知道如何在 python 中使用 Pandas 进行 反向熔化 这是我的起始数据 label type value 0 x a 1 1 x b 2 2 x c 3 3 y a 4 4 y b 5 5 y c 6 6 z a 7 7 z
  • 如何解决 AMD 路径冲突?

    我正在尝试使用Esri ArcGis JavaScript API 其加载方式为Dojo using dojo require 我有一个现有的模块化AMD requirejs我需要将此代码集成到其中的 Typescript 应用程序 在初始
  • 如何获取点击“赞”按钮的用户的 Facebook ID?

    有没有办法获取在我自己的网站上点击社交插件的 赞 按钮的用户的 Facebook ID 尽管我花了一整天的时间寻找它 但我找不到任何方法 据我所知 您不可能知道谁点击了 喜欢 按钮 但是如果用户通过您的网站登录 Facebook 意味着您编
  • Spring-React frontend-maven-plugin 不工作

    我正在关注的文档是https spring io guides tutorials react and spring data rest 构建一个使用 Spring 的 React 应用程序 spring 部分很好 直到到达建议使用插件安装
  • Android 回收器视图中的水平和垂直滚动

    我有一个要求 我需要在回收器视图中进行水平滚动和垂直滚动 它基于来自服务器的数据类型 如果服务器的响应将第一个元素作为数组 我需要将其放在水平滚动列表中 如果第二个元素是单个对象 那么我需要将其显示在卡片中 同样 顺序会发生变化 并应反映在
  • Excel VBA 项目未关闭

    我有一个 COM 插件 在其中处理 Excel 事件 我点击Alt F11查看与Excel相关的VBA项目 但是 当我关闭工作簿时 项目资源管理器中的 Excel VBA 项目也没有关闭 当我的 COM 插件未安装时 它会正常关闭 发生了什
  • .NET MVC 4 JSON Post/Put Web.config 中的字符限制

    我使用 PUT 动词将 JSON 发送到 MVC 控制器 当我达到某个限制时 我会收到 500 错误 如果我缩小发送的 JSON 那么它发送得很好 有谁知道 web config 中的配置允许将更大量的 JSON 传递到我的应用程序吗 答案
  • Power Query - 从单列到整个表的数据转换

    我有一个要求 我有一张这样的桌子 实际表有 2 列 Column1 Column2 ColAValue ColBValue New Row ColCValue Above Row ColCValue2 Above Row ColDValue
  • 我们可以在EF中进行交叉连接吗?

    所以基本上我回来时问了这个问题 查询包含对不同数据上下文中定义的项目的引用 但这次我是在 EF 中进行的 EF是否支持两个表之间的交叉连接 您无法在不同的数据上下文之间进行连接 您必须使用 linq objects 进行连接 var cro
  • 在 JWASM/MASM 中 - pshufw 产生错误 A2030:当前 CPU 模式下不接受指令或寄存器

    我有以下汇编程序 在编译时出现错误 686 mmx model flat c code MmxAdd proc push ebp mov ebp esp mov eax ebp 24 cmp eax AddOpTableCount jae