编写操作系统; asm关键字麻烦

时间:2015-11-30 02:22:41

标签: c assembly x86 att osdev

asm("lidt (%0)" : : "p"(&idtr));

以上语句将用于在我的IA-32操作系统中定义IDTR。但是出于某种原因,编译器会对它进行扼流:

kernel/kernel.c:52:2: error: invalid 'asm': invalid expression as operand
  asm("lidt (%0)" : : "p"(&idtr));
  ^

有谁知道我在这里做错了什么?如果您需要更多背景来回答我的问题,请说出来,我很乐意提供。

1 个答案:

答案 0 :(得分:3)

除了指示之外,你还有一件坏事。 正确的方法:

asm("lidt %0" : : "m"(idtr));