gpt4 book ai didi

c - 错误-无效的“asm”:%字母后缺少操作数编号

转载 作者:行者123 更新时间:2023-12-03 16:05:21 25 4
gpt4 key购买 nike

我在程序中编写内联汇编代码。我编写了以下代码,并编译了名为“ context.c”的源文件。但是编译器始终显示此错误消息。

 context.c:42:2: error:
invalid 'asm': operand number missing after %-letter
__asm__ __volatile__(
^


我搜索了每条与我有相同错误消息的文章,并且我非常仔细地阅读了内联汇编手册。但是我找不到故障代码。请帮忙!

    void _os_restore_context(addr_t sp){
__asm__ __volatile__( //line 42
"movl %0, %%esp \n\t"
"popl %%edi \n\t"
"popl %%esi \n\t
"popl %%ebp \n\t
"addl $4, %%esp #pass esp \n\t
"popl %%ebx \n\t
"popl %%edx \n\t
"popl %%ecx \n\t
"popl %%eax \n\t
"popl %eflags \n\t
"addl $4, %%esp #pass eip \n\t
"popl %%ebp \n\t
"ret \n\t
:: "m" (sp) : "%eax"
);
}

最佳答案

我解决了我的问题。原因是eflags注册。 eflags和eip寄存器具有特殊用途,因此用户程序通常无法访问它。

为了给您更多信息,此代码是小型操作系统的一部分,专门用于学习os。该操作系统称为EOS(教育操作系统),在另一部分中具有硬件仿真器源代码,而eflags寄存器在该部分中被定义为用汇编语言编写的寄存器变量。因此,建议将%eflags替换为_eflags,这是寄存器变量的名称。之后,错误消失。

祝你今天愉快!

关于c - 错误-无效的“asm”:%字母后缺少操作数编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29908017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com