【问题标题】:"error: parser: instruction expected" when I use "org 0x0100" directive当我使用“org 0x0100”指令时出现“错误:解析器:预期指令”
【发布时间】: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


【解决方案1】:

origin 指令告诉汇编器从给定值初始化程序中数据和代码的所有偏移量。

org 0x0100 用于编写小型(通常为 .COM 文件)DOS 程序以补偿PSP(Program Statement Prefix)

如果你在 linux 上工作,添加 orginate 指令是没有意义的。

nasm -f bin max.asm

可以,但是只能在DOSBOX中执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    相关资源
    最近更新 更多