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

如何用16h BIOS调用显示字符?汇编程序输出异常求助

汇编程序输出乱码的解决方法

你的汇编代码意图获取按键字符并显示,但输出乱码,核心问题是字符串输出功能的使用错误,以下是具体分析和解决方法:

原代码问题分析

你使用int 21h的ah=9功能输出内容,但这个功能要求输出的是以$结尾的字符串。而你定义的znak仅分配了1个字节存储输入字符,没有添加结束符$,程序会从znak地址开始连续输出内存中的数据,直到遇到$为止,这就是你看到乱码的原因。

解决方法一:修复字符串输出逻辑

修改代码,为字符串添加结束符$,确保int 21h ah=9能正确识别字符串边界:

org 100h

section .text
_start:
    mov ah, 0     
    int 16h          ; 获取按键ASCII码到al寄存器

    mov [znak], al
    mov byte [znak+1], '$' ; 手动添加字符串结束符$

    mov ah, 9   
    mov dx, znak     
    int 21h         ; 输出以$结尾的字符串

    mov ah, 4Ch         
    int 21h          ; 退出程序

section .data
    znak db 0, 0     ; 分配2字节空间,分别存储字符和结束符

解决方法二:使用单个字符输出功能

如果只是输出单个字符,更适合用int 21h的ah=2功能(专门输出单个字符),无需处理字符串结束符:

org 100h

section .text
_start:
    mov ah, 0     
    int 16h          ; 获取按键ASCII码到al寄存器

    mov ah, 2
    mov dl, al       ; 将待输出字符放入dl寄存器
    int 21h         ; 输出单个字符

    mov ah, 4Ch         
    int 21h          ; 退出程序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:08:20