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

时间:2018-05-20 15:53:20

标签: assembly x86

我完成了导航键的创建,读写。一切正常,但tab和enter仍然是马车。这是我用来检查tab和enter是否被按下的代码

user:
cmp ah,1ch
je ent
cmp al,9
je tab

以下是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表示总字符数。

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

1 个答案:

答案 0 :(得分:2)

输入就在那里,但你没有使用DOS <EOL>序列,这​​是两个字节长:13,10。你确实只插入了由单字节10组成的类似UNIX的<EOL>,和记事本不能很好地处理(任何更高级的文本编辑器通常会自动检测结束行并很好地理解UNIX风格,IIRC的wordpad和记事本++当然可以,或者当然是linux中的每个文本编辑器。)

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

从你的帖子中不清楚tab有什么问题,代码看起来也不错。

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

相关问题