执行汇编代码时控制台上的垃圾字符
Posted
技术标签:
【中文标题】执行汇编代码时控制台上的垃圾字符【英文标题】:Junk characters on console when execute assembly code 【发布时间】:2011-09-22 14:40:42 【问题描述】:x86 汇编编程初学者。我有一个简单的 asm 文件,我使用 nasm 版本组装 - NASM 版本 2.10rc6 于 2011 年 6 月 6 日编译,用于 windows(我的 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(用于 64 位操作系统 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 可执行文件?或者就此而言,nasm 表示它支持的任何其他可执行文件(如 elf32/coff)?
【问题讨论】:
【参考方案1】:问题是:
ORG 100
应该是:
ORG 100h
二进制文件是.COM
,所以无论如何都会在100h
加载和运行;该错误意味着汇编程序为msg
计算的地址将比应有的早156 个字节,因此会产生额外的垃圾。
ORG
指令仅适用于 bin
格式。其他可执行格式具有节(或段)。 (参见NASM manual 的"Output Formats" 部分。)
【讨论】:
以上是关于执行汇编代码时控制台上的垃圾字符的主要内容,如果未能解决你的问题,请参考以下文章
在 .NET 的控制台上打印 ASCII 0x07 字符时,这会导致系统发出蜂鸣声