我一直在尝试使用汇编语言创建一个文本编辑器,如何使选项卡/输入工作



我完成了导航键的创建,读写。一切正常,但选项卡和输入一直有错误。这是我用来检查是否按下制表符和回车

键的代码
user:
cmp ah,1ch
je ent
cmp al,9
je tab

这是选项卡和输入的代码

ent:
mov bx,file_size
mov file_size1,bx
mov cx,1
call shift_right
mov si,offset buffer
add si,index
mov al,10
mov [si],al
call ClearScreen
call OUTPUT_BUFFER
mov si,offset buffer
inc file_size
inc index
mov x_pos,0
add y_pos,1
add si,index
inc si
jmp user
tab:
mov bx,file_size
mov file_size1,bx
mov cx,1
call shift_right_cx
mov al,9
mov [si],al
call ClearScreen
call OUTPUT_BUFFER
mov si,offset buffer
inc file_size
inc index
add x_pos,7
add si,index
inc si
jmp user

缓冲区是保存字符串的位置。索引跟踪字符串的索引。file_size表示字符总数。

如果我按 Enter 并保存文件,然后使用记事本重新打开文件,则不会出现输入。

输入在那里,但您没有使用 DOS<EOL>序列,该序列长度为两个字节:13、10。您确实只插入了由单字节 10 组成的类似 UNIX 的<EOL>,记事本处理得不好(任何更高级的文本编辑器通常都会自动检测结束行并很好地理解 UNIX 样式,IIRC 写字板和记事本++当然可以,当然是 Linux 中的每个文本编辑器(。

您可以通过插入两个字节 13、10 新行序列(或使用支持当前新行的文本编辑器(来修复它。

从您的帖子中不清楚选项卡的问题是什么,代码看起来也不错。

另外,我想您可能希望在call OUTPUT_BUFFER之前增加file_size,因为数据已经更大了?

最新更新