汇编实现文本编辑器:Tab与Enter功能异常及换行保存丢失问题求助
问题分析与解决方案
核心问题很明确:Windows系统下的记事本对换行符的要求是回车(CR, 0x0D) + **换行(LF, 0x0A)**的组合,而你的代码里仅写入了LF(mov al,10,对应ASCII的换行符),这就导致记事本无法识别换行效果。
具体修改步骤
- 补充CR字符写入:在Enter处理逻辑中,需要先写入CR(ASCII值13),再写入LF(ASCII值10),满足Windows文本文件的换行标准。
- 调整计数变量:因为要插入两个字符,所以
file_size(字符总数)和index(字符串索引)都需要增加2,而非原来的1。 - 修正光标与内存操作:确保buffer的写入位置正确,光标能正常跳转到下一行开头。
修改后的Enter处理代码
ent: mov bx, file_size mov file_size1, bx ; 插入两个字符(CR+LF),所以cx设为2 mov cx, 2 call shift_right mov si, offset buffer add si, index ; 先写入回车符CR(0x0D) mov al, 13 mov [si], al inc si ; 再写入换行符LF(0x0A) mov al, 10 mov [si], al call ClearScreen call OUTPUT_BUFFER ; 更新字符总数和索引 add file_size, 2 add index, 2 ; 光标跳转到下一行开头 mov x_pos, 0 add y_pos, 1 jmp user
额外注意点
- 确认你的
shift_right函数支持处理cx=2的情况,即能将buffer中从index位置开始的字符向右移动2位,为CR+LF腾出足够空间。 - 如果你的编辑器需要跨系统兼容,其他类Unix系统仅需LF即可,但针对Windows环境的记事本,必须保留CR+LF的组合。
内容的提问来源于stack exchange,提问作者MMKI NEWS
相关产品推荐
相关产品推荐

