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

汇编实现文本编辑器:Tab与Enter功能异常及换行保存丢失问题求助

问题分析与解决方案

核心问题很明确:Windows系统下的记事本对换行符的要求是回车(CR, 0x0D) + **换行(LF, 0x0A)**的组合,而你的代码里仅写入了LF(mov al,10,对应ASCII的换行符),这就导致记事本无法识别换行效果。

具体修改步骤

  1. 补充CR字符写入:在Enter处理逻辑中,需要先写入CR(ASCII值13),再写入LF(ASCII值10),满足Windows文本文件的换行标准。
  2. 调整计数变量:因为要插入两个字符,所以file_size(字符总数)和index(字符串索引)都需要增加2,而非原来的1。
  3. 修正光标与内存操作:确保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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:09:24