表达式中缺少运算符 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
覆盖内存操作数。为两个版本生成的指令将是相同的。
我有以下代码和一个简单的汇编程序
.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
覆盖内存操作数。为两个版本生成的指令将是相同的。