为什么 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.exeml64.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

注意:我不知道它是否正常工作。