以下代码有什么问题?
__asm__("mov %0, %%eax" : :"a" (ptr));
__asm__(".intel_syntax noprefix");//switch to intel syntax.
asm("lidt [eax]");
我在编译中遇到错误:
/tmp/cciOoSro.s: Assembler messages:
/tmp/cciOoSro.s:1737: Error: no such instruction: popl %ebp
这是为我的Os加载中断描述符表IDT。但似乎有些不对劲。我不熟悉语法。我习惯了英语语法。
该函数是使用lidt将我的idt指针加载到处理器。
void setup_idt(uint32 ptr) //to setup the idt i.e to load the idt's pointer
{
__asm__("mov %0, %%eax" : :"a" (ptr));
__asm__(".intel_syntax noprefix");//switch to intel sytax.
__asm__("lidt [eax]");
}
答案 0 :(得分:3)
我认为.intel_syntax noprefix
行应用于所有内容,直到源代码结束。所以它试图将gcc的汇编代码解释为英特尔代码。
你应该:
1.将所有装配线合并为一个__asm__
语句(__asm__("line one\n" "line two\n")
。
2.最后一行应该.att_syntax prefix
,以返回AT& T语法。
或者只使用AT& T语法。这并不难。