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

如何在Dosbox环境的MASM汇编中打印输出字符的ASCII编码

功能实现说明

你编写的MOV AX, 'A'执行后,寄存器AL中已经存储了'A'对应的ASCII码值(十六进制为0x41,十进制为65),不需要额外获取逻辑,只需要将这个8位数值转换为可打印的数字字符,调用DOS系统中断输出即可。

完整可运行代码
; DOS环境下MASM汇编程序,输出'A'对应的ASCII码十进制值
DATAS SEGMENT
    buf DB 3 DUP(0)  ; 8位ASCII码最大为255,3位缓冲区足够存储
DATAS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX

    ; 你的原始逻辑,'A'的ASCII码已存入AL寄存器
    MOV AL, 'A'
    MOV CX, 3
    MOV DI, OFFSET buf + 2  ; 从缓冲区末尾开始存拆分后的字符
    MOV BL, 10  ; 按十进制拆分,除数为10

; 拆分数值为单个十进制位
SPLIT_LOOP:
    MOV AH, 0
    DIV BL      ; 除以10,AL存商,AH存余数
    ADD AH, 30H ; 余数转成对应数字字符的ASCII码
    MOV [DI], AH
    DEC DI
    CMP AL, 0   ; 商为0则拆分完成
    JZ PRINT_LOOP
    LOOP SPLIT_LOOP

; 逐位打印结果
PRINT_LOOP:
    INC DI
    MOV DL, [DI]
    MOV AH, 2   ; 调用DOS 21H中断2号功能,输出单个字符
    INT 21H
    CMP DI, OFFSET buf + 2
    JNZ PRINT_LOOP

    ; 程序退出返回DOS
    MOV AH,4CH
    INT 21H
CODES ENDS
END START
编译运行步骤
  • 将上述代码保存为ascii.asm文件,放在DOSBox挂载的目录下
  • 执行汇编命令:masm ascii.asm;,末尾分号可跳过参数确认步骤,直接生成ascii.obj
  • 执行链接命令:link ascii.obj;,生成可执行文件ascii.exe
  • 运行程序:ascii.exe,控制台会输出65,即'A'对应的十进制ASCII编码

如果你需要输出十六进制格式的ASCII码,只需将拆分时的除数10改为16,余数大于9时加37H转为A~F的字符即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:24:05