【问题标题】:ASM: too many memory references for `mov'ASM:“mov”的内存引用过多
【发布时间】:2019-07-25 00:09:52
【问题描述】:

又是我,我的 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 assembly x86 osdev intel-syntax


    【解决方案1】:

    如果您使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      相关资源
      最近更新 更多