MASM中如何打印数组?现有代码输出异常求助
问题描述
尝试在DOSBox终端打印MASM定义的数组时输出异常,但将数组替换为字符串则能正常工作。
相关代码
.model tiny .486 .data dat1 db 12h,13h,14h,15h term db '$' .code .startup lea dx,dat1 mov ah,09h int 21h .exit end
输出情况

当前得到的异常输出
替换为字符串时可正常输出
问题原因与解决方法
核心原因:DOS中断
int 21h的ah=09h功能是打印以$为结束标记的ASCII字符串。你定义的dat1中是十六进制数值12h、13h、14h、15h,这些对应ASCII表中的不可打印控制字符(比如12h是换页符,13h是回车符),所以终端会出现异常输出,而非预期的数字显示。解决方法:
- 直接存储数值对应的ASCII字符:
如果要打印这些十六进制数的字符形式,把数组内容改成对应的ASCII码即可。比如要打印十六进制的"12、13、14、15",就把数值换成'1'、'2'、'1'、'3'...,最后加上$结束符:.model tiny .486 .data dat1 db '12','13','14','15','$' .code .startup lea dx,dat1 mov ah,09h int 21h .exit end - 编写数值转ASCII子程序:
如果需要从原始数值转换输出,可以写一个子程序,把每个字节的十六进制/十进制数值转换成对应的ASCII字符,然后调用DOS中断int 21h的ah=02h功能(打印单个字符)逐个输出。
- 直接存储数值对应的ASCII字符:
内容的提问来源于stack exchange,提问作者Archit_0410
相关产品推荐
相关产品推荐

