再次是我,我的idt.S文件(使用gcc编译的Intel语法)出现新问题。当我尝试编译以下代码时:
static
我收到一个我真的不知道如何解决的错误:
load_idt:
mov edx, (esp + 4) ; On this line
lidt (edx)
sti
ret
答案 0 :(得分:6)
如果您使用类似以下的方法与GCC组装:
gcc -c -m32 -masm=intel idt.S -o idt.o
问题是:
.intel_syntax noprefix
添加到文件顶部。默认情况下,假设Intel语法在所有寄存器上都要求.s
前缀,则GCC会汇编.S
和%
文件。该指令消除了该要求。[
和]
而不是括号(
和)
。#
而不是;
开头。 代码应类似于:
.intel_syntax noprefix
load_idt:
mov edx, [esp + 4] # On this line
lidt [edx]
sti
ret