又是我,我的 idt.S 文件中有一个新问题(使用 gcc 编译的 Intel 语法)。当我尝试编译以下代码时:
load_idt:
mov edx, (esp + 4) ; On this line
lidt (edx)
sti
ret
我收到一个我真的不知道如何解决的错误:
Error: 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_syntax noprefix
load_idt:
mov edx, [esp + 4] # On this line
lidt [edx]
sti
ret