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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:10:34