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

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是回车符),所以终端会出现异常输出,而非预期的数字显示。

  • 解决方法:

    1. 直接存储数值对应的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
      
    2. 编写数值转ASCII子程序:
      如果需要从原始数值转换输出,可以写一个子程序,把每个字节的十六进制/十进制数值转换成对应的ASCII字符,然后调用DOS中断int 21h的ah=02h功能(打印单个字符)逐个输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:12:38