执行汇编代码时控制台上的垃圾字符

时间:2011-06-25 13:34:35

标签: assembly x86 nasm

x86的初学者到汇编编程。我有一个简单的asm文件,我使用nasm版本组装 - 在2011年6月6日编译的NASM版本2.10rc6,用于windows(我的窗口是Windowa-7 64位)。 NASM从here下载(nasm-2.10rc6-win32.zip)。

ORG 100
USE16

    mov ah, 09
    mov dx, msg
    int 21h

    mov ah, 01
    int 21h
    mov ah, 4ch
    int 21h

    msg db 'Hello assembly', 0Ah, '$'

然后我使用命令汇编 -

  

nasm -f bin hello.asm -o hello.com

然后我使用Dosbox运行生成的可执行文件hello.com(Dos模拟器用于64位操作系统Windows-7)。 当它运行时,控制台上的输出输出有我的字符串'Hello assembly'以及之前打印的一些垃圾字符/控制字符,如下所示:

enter image description here

这是什么原因。代码中有什么问题吗?

我需要做些什么来解决这个问题?

编辑:当我尝试向nasm提供-f选项以生成特定类型的可执行输出时,例如Win32或Win64输出我一直收到错误说:

nasm -f win64 hello.asm -o hello.com

hello.asm:1: error: parser: instruction expected

期待什么?如何使用nasm生成win32 / win64可执行文件?或者对于任何其他可执行文件,如elf32 / coff,nasm说它支持吗?

1 个答案:

答案 0 :(得分:3)

问题是:

ORG 100

应该是:

ORG 100h

二进制文件是.COM,因此无论如何都会加载并运行100h;错误意味着汇编程序为msg计算的地址将比它应该早156个字节,因此是额外的垃圾。

ORG指令仅适用于bin格式。其他可执行格式具有部分(或段)。 (请参阅"Output Formats"NASM manual部分。)