导致表达式语法错误的 mov 指令
Posted
技术标签:
【中文标题】导致表达式语法错误的 mov 指令【英文标题】:Mov instruction causing Expression Syntax Error 【发布时间】: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 源文件,但不幸的是我没有找到它。
【参考方案1】:
为了完整起见,我将添加一个答案 - 感谢@Jester 实际指出了这个问题。代码是使用 AT&T 语法编写的,但是我尝试使用使用 Intel 语法的 nasm 进行编译。
【讨论】:
以上是关于导致表达式语法错误的 mov 指令的主要内容,如果未能解决你的问题,请参考以下文章