ASM: `mov' 的内存引用过多
ASM: too many memory references for `mov'
又是我,我的 idt.S 文件(使用 gcc 编译的 Intel 语法)出现了新问题。当我尝试编译以下代码时:
load_idt:
mov edx, (esp + 4) ; On this line
lidt (edx)
sti
ret
我收到一个我真的不知道如何修复的错误:
Error: too many memory references for `mov'
如果您使用 GCC 进行汇编,使用类似:
gcc -c -m32 -masm=intel idt.S -o idt.o
问题是:
- 您需要将指令
.intel_syntax noprefix
添加到文件的顶部。默认情况下 GCC 汇编 .s
和 .S
文件假设 Intel 语法要求所有寄存器上的 %
前缀。该指令消除了该要求。
- 在 Intel 语法中,内存操作数使用方括号
[
和 ]
而不是圆括号 (
和 )
.
- 评论以
#
开头,而不是 ;
。
代码应如下所示:
.intel_syntax noprefix
load_idt:
mov edx, [esp + 4] # On this line
lidt [edx]
sti
ret
又是我,我的 idt.S 文件(使用 gcc 编译的 Intel 语法)出现了新问题。当我尝试编译以下代码时:
load_idt:
mov edx, (esp + 4) ; On this line
lidt (edx)
sti
ret
我收到一个我真的不知道如何修复的错误:
Error: too many memory references for `mov'
如果您使用 GCC 进行汇编,使用类似:
gcc -c -m32 -masm=intel idt.S -o idt.o
问题是:
- 您需要将指令
.intel_syntax noprefix
添加到文件的顶部。默认情况下 GCC 汇编.s
和.S
文件假设 Intel 语法要求所有寄存器上的%
前缀。该指令消除了该要求。 - 在 Intel 语法中,内存操作数使用方括号
[
和]
而不是圆括号(
和)
. - 评论以
#
开头,而不是;
。
代码应如下所示:
.intel_syntax noprefix
load_idt:
mov edx, [esp + 4] # On this line
lidt [edx]
sti
ret