问题描述
|
x86汇编程序的初学者。我有一个简单的asm文件,我使用nasm版本进行组装-NASM版本2.10rc6于2011年6月6日针对Windows编译(我的Windows是Windowa-7 64位)。 NASM是从此处下载的(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(用于64位OS Windows-7的Dos模拟器)运行生成的可执行文件hello.com。
当它运行时,在控制台上的输出输出将在我的字符串\'Hello assembly \'加上前面打印的一些垃圾字符/控制字符,如下所示:
这是什么原因。代码有什么问题吗?
我需要怎么做才能解决此问题?
编辑:当我尝试给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所支持?
解决方法
问题是:
ORG 100
应该是:
ORG 100h
二进制文件是.COM
,因此无论load5ѭ都会加载并运行;该错误意味着汇编程序为msg
计算的地址比其应早156个字节,因此会产生额外的垃圾。
ORG
伪指令仅适用于bin
格式。其他可执行格式具有部分(或段)。 (请参阅NASM手册的“输出格式”部分。)