【发布时间】:2019-10-18 20:50:47
【问题描述】:
我正在尝试从 C 调用一些汇编代码。我最近将程序从 x86 切换到 x86-64 并且在它工作之前。我有这个代码:
__asm__ __volatile__("lidtl (%0)" : : "r" (&idt_reg));
其中&idtreg 是对结构的引用。用 GCC 编译它会给我这个错误:
“lidt”的指令后缀无效
当我添加一个$ 令牌时:
__asm__ __volatile__("lidtl $(%0)" : : "r" (&idt_reg));
我收到此错误:
非法立即寄存器操作数(%rax)
为什么会出现这个问题,我该如何解决?
【问题讨论】:
-
64位模式不应该是
lidtq吗?
标签: gcc assembly x86-64 inline-assembly osdev