1

鉴于此代码:

int main(void)
{
    __asm volatile ("jmp %eax");

    return 0;
}

32 位 TCC 会抱怨:

test.c:3: error: unknown opcode 'jmp'

但是 64 位版本可以编译得很好。

32位代码有什么问题?

4

1 回答 1

1

解决方案是在寄存器前简单地添加一个星号 (*),如下所示:

__asm volatile ("jmp *%eax");

我不太确定星号是什么意思。根据这个SO帖子:

星号是一些语法糖,表示将通过引用/指针间接传递控制。

至于为什么它适用于 64 位 TCC,我认为这是一个错误;64 位 GCCError: operand type mismatch for 'jmp'应该抱怨 .

于 2013-08-30T05:28:22.323 回答