【发布时间】:2020-08-28 22:32:28
【问题描述】:
我是非常组装新手,所以请善待。
我正在尝试按照教程在程序集中创建一个基本的引导加载程序,但遇到了一个问题。以下代码应将字母 A 加载到 %ax 中,然后触发中断 10,但 mov 和 int 指令会导致语法错误。我很确定这段代码是有效的,所以我非常感谢有人指出我正确的方向
# 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 源文件,但不幸的是我没有找到它。