【问题标题】:Mov instruction causing Expression Syntax Error导致表达式语法错误的 mov 指令
【发布时间】:2020-08-28 22:32:28
【问题描述】:

我是非常组装新手,所以请善待。

我正在尝试按照教程在程序集中创建一个基本的引导加载程序,但遇到了一个问题。以下代码应将字母 A 加载到 %ax 中,然后触发中断 10,但 movint 指令会导致语法错误。我很确定这段代码是有效的,所以我非常感谢有人指出我正确的方向

# boot.asm
init:
    mov $0x0e41, %ax
    int $0x10
    hlt

times 510-($-$$) db 0
dw 0xaa55

nasm -f bin boot.asm -o boot.bin && qemu-system-x86_64 boot.bin 的输出是:

boot.asm:2: error: expression syntax error
boot.asm:3: error: expression syntax error

【问题讨论】:

  • 代码不是nasm 语法。它是 gnu 汇编器使用的 at&t。对于使用 intel 语法的 nasm,您可以执行 mov ax, 0x0e41; int 0x10; hlt
  • @Jester Ah TYSM - 我真的需要跟上这些事情的速度
  • 我认为这几乎是 Translating AT&T to INTEL syntax 的副本,但该问题的作者在发布答案后对其进行了编辑,使其成为一个不同的问题。
  • @PeterCordes 如果我知道其中任何一个是什么,我敢肯定我之前已经发现了:p - 道歉
  • 这不是针对您的投诉,只是想方设法将这个问题正式标记为已解决,而无需实际编写答案。 (尽管如果您的教程不包含用于制作引导加载程序的构建命令,请寻找更好的教程;这对正确来说非常重要且至关重要。如果您尝试将教程移植到不同的汇编程序,是的,这取决于您如果您还不知道 asm。Asm 非常不便携)无论如何,可能存在一个现有的问答,问题是尝试使用 NASM 组装 GAS 源文件,但不幸的是我没有找到它。

标签: assembly nasm att


【解决方案1】:

为了完整起见,我将添加一个答案 - 感谢@Jester 实际指出了这个问题。代码是使用 AT&T 语法编写的,但是我尝试使用使用 Intel 语法的 nasm 进行编译。

【讨论】:

    猜你喜欢
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多