很抱歉这么多问题,但我遇到了另一个神秘的错误,试图编译以下内联汇编(使用 -fasm-blocks ),该函数在 MSVC 中有效,但显然不在海湾合作委员会,并且无法处理它:
unsigned char testData = 128;
__asm
{
// ...
mov al, testData
mov ah, al // error: asm-specifier for variable '%al' conflicts with asm clobber list
shl eax, 16
// ...
};
这个 clobber列表是什么?它有什么问题?
我也尝试改变优化级别,但没有效果。
答案 0 :(得分:0)
这里解释了clobber-list:http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html,但不是在__asm语法的上下文中,我不熟悉它。我试着编译你的代码片段
jcomeau@intrepid:/tmp$ make test
cc test.c -o test
test.c:4: error: expected ‘(’ before ‘{’ token
答案 1 :(得分:0)
这必须是gcc中的一些错误(也许__asm块有隐含的破坏)。无论如何,有很多解决方法:
__asm
{
// ...
mov ah, testData
mov al, ah
shl eax, 16
// ...
};
或
__asm
{
// ...
mov al, testData
mov ah, testData
shl eax, 16
// ...
};
或
__asm
{
// ...
movzx eax, testData
imul eax, 0x0101
shl eax, 16
// ...
};