如何在DOSBox汇编程序中实现用户输入字符的屏幕移动?
解决汇编程序字符输入移动显示问题
原程序的核心问题是误用了数字输入输出函数,要实现字符的输入和移动显示,需要针对字符操作调整代码,以下是修正后的完整代码:
include PCMAC.INC .model small .586 .stack 100h .data prompt DB "请输入要显示的字符: $" theChar DB ? ; 字符是8位ASCII值,用DB定义即可 .code ; 不再需要GetDec和PutDec,换成字符操作相关的宏/函数 delay proc push cx ;;保存调用者的CX寄存器 mov ecx,100000 for_2: nop dec ecx jnz for_2 pop cx ;;恢复调用者的CX ret delay endp main proc _Begin _PutStr prompt _GetCh ; 读取单个字符,结果存在AL中 mov theChar, al ; 把字符存入变量 mov cx,80 ; 控制移动次数(80列) for_1: mov al, theChar ; 把字符加载到AL _PutCh al ; 输出字符本身 call delay ; 延迟实现移动效果 _PutCh 8,32 ; 退格+空格,清除当前位置的字符 dec cx jnz for_1 _Exit 0 main endp end main
关键修改点说明:
- 变量类型调整:
theChar从DW改为DB,因为ASCII字符仅需1字节存储,无需字类型。 - 输入函数替换:用
_GetCh替代GetDec,_GetCh直接读取用户输入的单个ASCII字符,结果存放在AL寄存器中。 - 输出逻辑修正:去掉
PutDec,直接用_PutCh al输出字符本身——原PutDec是把数字转换为十进制字符串输出,不适合字符显示。 - 提示文本修正:修正了原提示字符串的语法错误,使其更通顺。
- 寄存器对应:
_GetCh返回值在AL,所以存储变量时用mov theChar, al而非ax,避免高位字节的无效数据干扰。
内容的提问来源于stack exchange,提问作者Learning2Code
相关产品推荐
相关产品推荐

