ASM: mov指令的内存引用过多

5

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

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

我收到一个错误,但我真的不知道如何修复它:
Error: too many memory references for `mov'
1个回答

8
如果你正在使用类似以下命令通过GCC进行编译:
gcc -c -m32 -masm=intel idt.S -o idt.o

问题如下:
  • 您需要在文件顶部添加指令.intel_syntax noprefix。默认情况下,GCC将汇编.s.S文件时假定使用英特尔语法,要求在所有寄存器前加上%前缀。该指令可消除此要求。
  • 在英特尔语法中,内存操作数使用方括号[]而不是圆括号()
  • 注释以#开头,而不是;

代码应如下所示:

.intel_syntax noprefix

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接