TASM编译输出"Hello World"前出现异常符号,求原因排查
汇编程序输出异常符号的原因及解决方法
你的汇编代码如下:
.model tiny .data message: db "Hello World $"; .code org 100h main proc near mov dx, offset message mov ah,09h int 21h mov ah, 4ch mov al, 00 int 21h endp end main
输出出现异常符号主要有两个原因:
过程结束指令语法错误
代码中endp前缺少过程名main,正确写法应为main endp。这个语法错误会导致汇编器对代码结构解析异常,生成的可执行文件中数据或指令的位置错乱,最终输出乱码。链接方式错误(未生成COM格式程序)
.model tiny是用于生成COM格式程序的模型,这类程序要求所有段合并为一个,且起始地址为org 100h。但你使用默认的link hello.obj命令时,链接器会生成EXE格式文件,而非COM格式。EXE程序加载时DS寄存器指向程序段前缀(PSP),而非数据段的段基址,导致mov dx, offset message指向了错误的内存区域,从而输出乱码。
解决步骤:
- 修正语法错误:将
endp改为main endp。 - 生成正确的COM格式程序:
- 编译:
tasm hello.asm - 链接时添加
/t参数指定生成COM文件:link /t hello.obj
或者直接一步编译生成COM:tasm hello.asm, hello.com, , ;
- 编译:
执行修正后的程序,就能正常输出Hello World了。
内容的提问来源于stack exchange,提问作者Chainsaw
相关产品推荐
相关产品推荐

