为什么 visual studio 2015 在编译 .asm 时无法解析 dqword?
why can't visual studio 2015 resolve dqword when compiling .asm?
我想编译我的 strlen_sse.asm
来完成一个功能 strlen_sse
,它与 strlen
具有相同的功能,但速度更快。我的代码如下:
.CODE
EQUAL_EACH = 00001000b
strlen_sse PROC
;ecx = string
mov eax, -16
mov edx, ecx
pxor xmm0, xmm0
STRLEN_LOOP:
add eax, 16
PcmpIstrI xmm0, dqword[edx+eax], EQUAL_EACH
jnz STRLEN_LOOP
add eax, ecx
ret
strlen_sse ENDP
END
我已经设置了命令行和其他属性,如下图所示:
图中命令行
就是command line
的中文。 输出
与 Output
相同
当我构建项目时,我收到以下消息:
1> Performing Custom Build Tools
1> Microsoft (R) Macro Assembler (x64) Version 14.00.23026.0
1> Copyright (C) Microsoft Corporation. All rights reserved.
1>
1> Assembling: strlen_sse.asm
1>strlen_sse.asm(13): error A2006: undefined symbol : dqword
如何解决?
我不知道你所说的 dqword
是什么意思。我猜您正在尝试使用用于其他汇编器的汇编代码。我应该在 masm 中为 128 位大小的内存操作数使用 XMMWORD PTR
前缀。
这里是用ml.exe
和ml64.exe
编译的修改后的代码:
tmp SEGMENT
strlen_sse PROC
;ecx = string
mov eax, -16
mov edx, ecx
pxor xmm0, xmm0
STRLEN_LOOP:
add eax, 16
PcmpIstrI xmm0, xmmword ptr [edx+eax], 00001000b
jnz STRLEN_LOOP
add eax, ecx
ret
strlen_sse ENDP
tmp ENDS
END
注意:我不知道它是否正常工作。
我想编译我的 strlen_sse.asm
来完成一个功能 strlen_sse
,它与 strlen
具有相同的功能,但速度更快。我的代码如下:
.CODE
EQUAL_EACH = 00001000b
strlen_sse PROC
;ecx = string
mov eax, -16
mov edx, ecx
pxor xmm0, xmm0
STRLEN_LOOP:
add eax, 16
PcmpIstrI xmm0, dqword[edx+eax], EQUAL_EACH
jnz STRLEN_LOOP
add eax, ecx
ret
strlen_sse ENDP
END
我已经设置了命令行和其他属性,如下图所示:
图中命令行
就是command line
的中文。 输出
与 Output
相同
当我构建项目时,我收到以下消息:
1> Performing Custom Build Tools
1> Microsoft (R) Macro Assembler (x64) Version 14.00.23026.0
1> Copyright (C) Microsoft Corporation. All rights reserved.
1>
1> Assembling: strlen_sse.asm
1>strlen_sse.asm(13): error A2006: undefined symbol : dqword
如何解决?
我不知道你所说的 dqword
是什么意思。我猜您正在尝试使用用于其他汇编器的汇编代码。我应该在 masm 中为 128 位大小的内存操作数使用 XMMWORD PTR
前缀。
这里是用ml.exe
和ml64.exe
编译的修改后的代码:
tmp SEGMENT
strlen_sse PROC
;ecx = string
mov eax, -16
mov edx, ecx
pxor xmm0, xmm0
STRLEN_LOOP:
add eax, 16
PcmpIstrI xmm0, xmmword ptr [edx+eax], 00001000b
jnz STRLEN_LOOP
add eax, ecx
ret
strlen_sse ENDP
tmp ENDS
END
注意:我不知道它是否正常工作。