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

