如何在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
相关产品推荐
相关产品推荐

