Tiny C编译器:“错误:未知操作码'jmp'”

问题描述 投票:1回答:1

鉴于此代码:

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

    return 0;
}

32位TCC会抱怨:

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

但64位版本将编译得很好。

32位代码有什么问题?

c assembly x86 tcc
1个回答
1
投票

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

__asm volatile ("jmp *%eax");

我不确定明星是什么意思。根据this SO帖子:

这个星是一些语法糖,表明控制是通过引用/指针间接传递的。

至于为什么它适用于64位TCC,我认为它是一个bug; 64位海湾合作委员会应该与Error: operand type mismatch for 'jmp'抱怨。

© www.soinside.com 2019 - 2024. All rights reserved.