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'以及之前打印的一些垃圾字符/控制字符,如下所示:
这是什么原因。代码中有什么问题吗?
我需要做些什么来解决这个问题?
编辑:当我尝试向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说它支持吗?
答案 0 :(得分:3)
问题是:
ORG 100
应该是:
ORG 100h
二进制文件是.COM
,因此无论如何都会加载并运行100h
;错误意味着汇编程序为msg
计算的地址将比它应该早156个字节,因此是额外的垃圾。
ORG
指令仅适用于bin
格式。其他可执行格式具有部分(或段)。 (请参阅"Output Formats"的NASM manual部分。)