又是我,我的 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