汇编程序中CR(ASCII 13)回车符无法正常输出的问题排查
问题分析与解决
核心错误原因
你代码里的CR被放在了字符串的$终止符之后:
TestW db "THIS IS A TEST!$", CR
而PCMAC.INC里的_PutStr宏是遇到$就停止输出,所以$后面的CR(包括后来加的LF)根本不会被输出,自然看不到回车换行的效果。
修正方案
把CR、LF放到$终止符前面,让_PutStr输出字符串内容时一并执行控制字符:
INCLUDE PCMAC.INC .model small .stack 100 .data CR EQU 13 LF EQU 10 ; DOS环境下通常CR+LF组合才能实现完整换行 TestW db "THIS IS A TEST!", CR, LF, "$" Instruct db "This program will average numbers entered until you type [q]. ", CR, LF, "$" .code NumAverage PROC mov ax, @data mov ds, ax _PutStr TestW _PutStr Instruct _Exit NumAverage ENDP END NumAverage
补充说明
DOS环境里,单独用CR只会让光标回到行首,后续输出会覆盖当前行内容;单独用LF只会让光标下移一行,不会回到行首。只有CR+LF组合,才能实现光标回到下一行开头的标准换行效果。
内容的提问来源于stack exchange,提问作者Erica Pacheco
相关产品推荐
相关产品推荐

