如何用int 21h ah=1实现单字符输入?代码修复与实现方案
8086汇编单字符输入功能修复实现
原代码意图实现单字符输入,但误用了int 21h ah=0Ah(该功能允许输入多字符),尝试添加mov ah,1 int 21h未达预期。需求是通过int 21h ah=1分别获取年级、班级两个单字符,输入一个后自动进入下一项,最终输出类似2a的结果。
修复后的完整代码
org 100h ; 打印欢迎信息 mov dx, offset msg mov ah, 9 int 21h ; 提示输入年级 mov dx, offset first mov ah, 9 int 21h ; 使用ah=1获取单字符(年级),输入后自动回显 mov ah, 1 int 21h mov year_char, al ; 保存年级字符到变量 ; 换行优化输入体验 mov ah, 2 mov dl, 13 int 21h mov dl, 10 int 21h ; 提示输入班级 mov dx, offset second mov ah, 9 int 21h ; 使用ah=1获取单字符(班级),输入后自动回显 mov ah, 1 int 21h mov class_char, al ; 保存班级字符到变量 ; 换行准备输出结果 mov ah, 2 mov dl, 13 int 21h mov dl, 10 int 21h ; 打印结果提示 mov dx, offset third mov ah, 9 int 21h ; 输出年级字符 mov ah, 2 mov dl, year_char int 21h ; 输出班级字符 mov dl, class_char int 21h ret ; 数据段定义 msg db "Welcome to Single Character input", 13, 10, "$" first db "Put your Year level: $" second db "Put your section: $" third db "Your year level and section is: $" year_char db ? ; 存储年级字符 class_char db ? ; 存储班级字符
关键修改说明
- 移除原代码中用于多字符输入的
inp、inp2变量及ah=0Ah调用,改用int 21h ah=1直接获取单字符(该功能输入字符后自动回显,无需额外处理) - 新增
year_char和class_char两个字节变量,分别存储输入的年级、班级字符,简化数据存储逻辑 - 添加回车换行操作(
dl=13+dl=10),让输入、输出的排版更清晰,避免内容堆叠 - 直接使用
int 21h ah=2输出存储的字符,替代原代码中通过字符串缓冲区输出的复杂逻辑 - 删除原代码中无效冗余指令(比如连续赋值
mov ah,1后又mov ah,2却不执行中断的无用代码)
内容的提问来源于stack exchange,提问作者Midorin
相关产品推荐
相关产品推荐

