首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JWASM/MASM - pshufw中,产生错误A2030:当前CPU模式下不接受的指令或寄存器。

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

Stack Overflow用户
提问于 2022-06-19 16:52:59
回答 1查看 138关注 0票数 4

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

代码语言:javascript
复制
.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模式下不接受的指令或寄存器

这是给我错误的指示:

代码语言:javascript
复制
pshufw mm2,mm0, 01001110b

我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-19 19:31:58

pshufw被认为是SSE(SSE-1)指令。该指令被认为是MMX (即MMXEXT )的一个扩展,要使用它,您必须使用.xmm指令而不是.mmx来启用SSE。这应该是可行的:

代码语言:javascript
复制
.686
.xmm
.model flat,c
.code

.xmm还暗示了.mmx,因此您不需要两者都使用。如果同时使用这两种方法,那么.mmx必须先于.xmm。我不建议两者兼用。

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

  • PINSRW 将普通寄存器中的16位值插入四个元素中的一个(由即时指定)
  • PEXTRW 将四个元素中的一个(由即时指定)提取到普通寄存器中
  • PMULHU 乘四个16位无符号元素,返回每个元素中最重要的16位。
  • PSHUFW 8位即时掩码控制下16位元件的完全洗牌
  • PMOVMSB 将由字节元素的MSbs组成的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\x{e76f}
  • PMINSW 有符号16位元素的最小值
  • PMINUB 无符号字节元素的最小值
  • PMAXSW 有符号16位元素的最大值
  • PMAXUB 无符号字节元素的最大值

您必须将.686 (或更高版本)与.xmm for .xmm指令一起使用,才能按预期工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72678731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档