You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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格式程序:
    1. 编译:tasm hello.asm
    2. 链接时添加/t参数指定生成COM文件:link /t hello.obj
      或者直接一步编译生成COM:tasm hello.asm, hello.com, , ;

执行修正后的程序,就能正常输出Hello World了。

内容的提问来源于stack exchange,提问作者Chainsaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:55:04