ASM:“ mov”的内存引用过多

时间:2019-03-03 15:25:58

标签: gcc assembly x86 osdev intel-syntax

再次是我,我的idt.S文件(使用gcc编译的Intel语法)出现新问题。当我尝试编译以下代码时:

static

我收到一个我真的不知道如何解决的错误:

load_idt:
        mov edx, (esp + 4) ; On this line
        lidt (edx)
        sti
        ret

1 个答案:

答案 0 :(得分:6)

如果您使用类似以下的方法与GCC组装:

gcc -c -m32 -masm=intel idt.S -o idt.o

问题是:

  • 您需要将伪指令.intel_syntax noprefix添加到文件顶部。默认情况下,假设Intel语法在所有寄存器上都要求.s前缀,则GCC会汇编.S%文件。该指令消除了该要求。
  • 在Intel语法存储操作数中,使用方括号[]而不是括号()
  • 注释以#而不是;开头。

代码应类似于:

.intel_syntax noprefix

load_idt:
        mov edx, [esp + 4] # On this line
        lidt [edx]
        sti
        ret