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

8086汇编反向打印文本时覆盖已有字符串的原因咨询

问题原因分析

你遇到的反向打印覆盖之前字符串的问题,核心原因是输入结束时存入数组的回车符(ASCII 13)被反向打印出来,导致光标回到当前行开头,后续输出的反向字符会从行首开始覆盖原有内容。

具体细节:

  • 在readText子程序中,当按下Enter键(ASCII 13)时,程序会把这个回车符存入array数组,然后返回主程序。
  • 主程序中mov cx, si把输入的字符总数(包括这个回车符)赋值给cx,接着dec si让si指向数组中最后一个存入的字符——也就是那个回车符。
  • 进入printArrayBackwards后,第一个被打印的字符就是这个回车符(ASCII 13),它的功能是将光标移动到当前行的最左端。
  • 后续打印的反向字符会从行首开始输出,直接覆盖掉之前已经打印的El texto al reves es: 这段提示文本。

你添加的解决代码为什么有效?

你提到在printArrayBackwards前添加一行代码就能解决,结合你代码中被注释的;;call putLine,应该是调用putLine子程序——它会输出回车(13)+换行(10),其中换行符(ASCII 10)会把光标移动到下一行的开头,这样后续打印反向字符时,会在新的一行输出,不会覆盖之前的提示文本。

额外优化建议

除了添加换行,还可以在主程序中跳过那个回车符,避免打印无效的控制字符:

mov cx, si
dec si          ; 指向最后一个字符(回车符)
dec si          ; 跳过回车符,指向真正的最后一个输入字符
sub cx, 1       ; 调整循环次数,减少一次(去掉回车符的计数)

内容的提问来源于stack exchange,提问作者Rodrigo Maidana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:55:19