0

代码一切正常,但后来我添加了创建展开数据的指令,而 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括号会使第一个错误消失(标签重新定义),但手册说不带括号使用它,无论如何它并不能解决问题。

我该如何解决?最好以创建适当展开数据的方式。

4

1 回答 1

1

我认为PROC_FRAME定义了标签,所以你不需要这s24_fl32_sse2_win64:条线——还有一些我在global s24_fl32_sse2_win64后面看到的例子PROC_FRAME——我不确定这是否是必需的。

此外 - alloc_stackand save_xmm128(不带方括号)是宏(它们处理堆栈操作本身和相关的展开原语) - 这些的展开原语版本是[allocstack ....]and [savexmm128....]

于 2013-02-11T10:57:12.653 回答