又是我,我的 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_syntax noprefix
load_idt:
mov edx, [esp + 4] # On this line
lidt [edx]
sti
ret
关于gcc - ASM : too many memory references for `mov' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54970389/