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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:20:28