表达式中缺少运算符 AND 命令以代码 1 退出

Missing operator in expression AND command exited with code 1

我有以下代码和一个简单的汇编程序

.686p
.model flat, stdcall 
.mmx
.xmm


.code 
DataString DB 'AGIJKSZ', 0FFH ;

MyProc1 proc 

    vpbroadcastd ymm0, [4 bytes of JJJJ]
    vpcmpeqb ymm0, ymm0, [DataString] 
    vpmovmskb eax, ymm0 
    tzcnt eax, eax       
    ret        
MyProc1 endp 

end

但是,当我尝试编译它时,我在 vpbroadcastd

上得到 Missing operator in expression

Error MSB3721 The command "ml.exe /c /nologo /Zi /Fo"Debug\JAAsm.obj" /W3 /errorReport:prompt /TaJAAsm.asm" exited with code 1.'

是因为我选错了CPU还是没有包含指令集,还是我的VS2015项目设置有问题?或者代码中可能缺少某些内容?

[4 bytes of JJJJ] 不是有效语法,似乎有人建议您创建一个指向 4 个字节的内存操作数,每个字节包含字母 J。我认为其目的是建议做类似的事情:

.686p
.model flat, stdcall 
.mmx
.xmm

.data
DataString DB 'AGIJKSZ', 0FFH
JMask DB 'JJJJ'

.code 
MyProc1 proc
    vpbroadcastd ymm0, dword ptr [JMask]
    vpcmpeqb ymm0, ymm0, [DataString] 
    vpmovmskb eax, ymm0 
    tzcnt eax, eax       
    ret        
MyProc1 endp 

end

我创建了一个名为 JMask 的 4 字节字符串,然后将其用作 vpbroadcastd 指令的内存操作数。或者,您可以使用此等效代码:

.686p
.model flat, stdcall 
.mmx
.xmm

.data
DataString DB 'AGIJKSZ', 0FFH
JMask DD 'JJJJ'

.code 
MyProc1 proc
    vpbroadcastd ymm0, [JMask]
    vpcmpeqb ymm0, ymm0, [DataString] 
    vpmovmskb eax, ymm0 
    tzcnt eax, eax       
    ret        
MyProc1 endp 

end

此版本将 Jmask 创建为包含 4 个字节 JJJJ 的 DWORD。这样做的好处是不需要像第一版程序那样用dword ptr覆盖内存操作数。为两个版本生成的指令将是相同的。