我正在尝试lidt
使用 -masm=intel 和 32 位(-m32)在 gcc 中的内联汇编中编写指令。所以我定义了以下结构:
typedef struct {
uint16_t length;
uint32_t base;
} idt_desc;
static idt_desc desc = {
sizeof(idt)-1,
(uint32_t)(uintptr_t)idt,
};
如果我使用 nasm,我将使用lidt [desc]
. 但我正在使用内联汇编并将其包含在一个函数中:
asm volatile("lidt %0"::"m"(desc):);
这给了我“错误:不支持的指令‘lidt’”。生成的程序集如下所示:
lidt QWORD PTR desc
据我所知,大括号在气体英特尔语法中是可选的。所以这里的问题是指令中qword ptr
不可接受的,因为它需要一个操作数。我怎样才能告诉 gcc 使用它?即,放下并使用. lidt
m16&32
qword ptr
desc