【发布时间】:2016-09-13 10:38:13
【问题描述】:
我有这个 NASM 代码:
请注意,这是纠正我的第一个错误之前的原始代码(请参阅下面的编辑):
[org 0x0100]
jmp start
Numbers: dw 10, 40, 20, 14, 19, 13, 50, 6, 60, 14
swap: db 0
start: mov bx, 0
mov byte [swap], 0
loop1: mov ax, [Numbers+bx]
cmp ax, [Numbers+bx+2]
jle noswap
mov dx, [Numbers+bx+2]
mov [Numbers+bx+2], ax
mov [Numbers+bx], dx
mov byte [swap], 1
noswap: add bx, 2
cmp bx, 18
jne loop1
mov ax, 0x4c00
int 0x21
我正在使用这个命令来组装:
nasm -f elf Max.asm
我得到这个错误:
错误:无法识别的指令 org
为什么会出现此错误,我该如何解决?
编辑:按照 cmets 中的建议删除 org 语句周围的括号后,我现在收到此错误:
Max.asm:1:错误:解析器:预期指令
【问题讨论】:
-
应该是
org 0x0100,根据manual(即没有括号)。下次请不要将代码发布为图像。我 VTC 是一个错字。 -
删除了括号,但现在得到了这个 Max.asm:1: error: parser: instruction expected and sorry for post image :)
-
请注意
org不适用于elf格式。如果您打算创建一个 linux 程序,请删除org行。如果您打算创建 DOS 程序,请删除-f elf。 -
您不想将代码添加到评论中,是吗? 叹息
-
您的目标是针对 16 位 MS-DOS 环境的可执行文件,还是尝试创建在 Linux 上运行的可执行文件?此代码如果编译为
nasm -f bin Max.asm -o Max.com,则只能在支持 16 位 MS-DOS 程序(DOSBox 等)的环境中运行。如果您尝试创建在 Linux 中本机运行的 Linux 可执行文件,那么这将不起作用.像int 0x21这样的 MS-DOS 中断不适用。
标签: assembly x86 nasm dos x86-16