Я пытался создать текстовый редактор, используя язык ассемблера, Как мне заставить работать tab / enter? - PullRequest
0 голосов
/ 20 мая 2018

Я закончил создавать клавиши навигации, читать и писать.Все работает, но tab и enter продолжают глючить.Вот код, который я использую, чтобы проверить, нажата ли вкладка и ввод

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 указывает общее количество символов.

Если я нажму клавишу ввода и сохраню файл, а затем снова открою файл с помощью блокнота, ввод не появится.

1 Ответ

0 голосов
/ 20 мая 2018

Ввод есть, но вы не использовали последовательность DOS <EOL> длиной два байта: 13, 10. Вы вставили только UNIX-подобный <EOL>, состоящий из одного байта 10, и блокнот не делает 'не справляются с этим (любой более продвинутый текстовый редактор обычно автоматически определяет конечные строки и хорошо понимает стиль UNIX, IIRC, конечно же, wordpad и notepad ++, или, конечно, любой текстовый редактор в linux).

Вы можете исправитьэто вставка двухбайтовой 13, 10 новой последовательности строк (или использование текстовых редакторов, поддерживающих ваши текущие новые строки).

Из вашего поста не ясно, в чем была проблема с табуляцией, код выглядит вроде ОКтоже.

Также, я думаю, вы можете увеличить file_size до call OUTPUT_BUFFER, так как данные уже больше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...