代码一切正常,但后来我添加了创建展开数据的指令,而 YASM 开始拒绝汇编我的代码。
构建设置适用于 x64,如自动生成的命令行中的“-f x64”所示:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\"vsyasm.exe -Xvc -f x64 -o "x64\Debug\\" -l "" -P "" --mapdir= "" -E "" --prefix "" --suffix "" -rnasm -pnasm -m amd64
通常-m
开关不在那里,但我添加它是为了很好的衡量。那没有帮助。
-f
将switch的参数更改为win64
也无济于事:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\"vsyasm.exe -Xvc -f win64 -o "x64\Debug\\" -l "" -P "" --mapdir= "" -E "" --prefix "" --suffix "" -rnasm -pnasm -m amd64
在这段代码中,
bits 64
global s24_fl32_sse2_win64
s24_fl32_sse2_win64:
proc_frame s24_fl32_sse2_win64
sub rsp, 8 + 4 * 16
[alloc_stack 8 + 4 * 16]
movdqa [rsp], xmm6
[save_xmm128 xmm6, 0]
[endprolog]
VSYASM 抱怨函数标签的重新定义,这可能意味着它没有被识别proc_frame
为指令。它也说error: unrecognized directive 'alloc_stack'
和相同的save_xmm128
。它不抱怨endprolog
。
放入proc_frame
括号会使第一个错误消失(标签重新定义),但手册说不带括号使用它,无论如何它并不能解决问题。
我该如何解决?最好以创建适当展开数据的方式。