Предыдущий раздел | РЕДАКТИРОВАНИЕ ИНФОРМАЦИИ В ОП | Следующая глава |
Для выполнения любой из четырех своих команд, выполняющих управление курсором, процедура Edit_sector вызывает свою дочернюю процедуру Edit_command. Алгоритм данной процедуры аналогичен алгоритму ранее разработанного интерпретатора команд – Command. Более того, идентичны тексты этих процедур. Идентичны и структуры используемых таблиц переходов. Естественно, что эти таблицы различаются числом строк, а также именами вызываемых процедур.
Имена процедур в новой таблице переходов: Cur_right (сдвиг курсора вправо), Cur_left (сдвиг курсора влево), Cur_top (сдвиг курсора вверх), Cur_down (сдвиг курсора вниз). Вот тексты двух из четырех процедур:
; Перемещение курсора на одну позицию влево
;
Cur_left:
cmp [Nt], byte 0
je .M1
dec byte[Nt]
jmp .Exit
.M1: inc byte[Nt]
dec byte[B]
.Exit: call Set_cursor
; Перемещение курсора на одну позицию вверх
;
Cur_top:
sub [B], byte 16
call Set_cursor
ret
Тексты двух других процедур Cur_right и Cur_down очень похожи, соответственно, на тексты процедур Cur_left и Cur_top.
Обратите внимание, что в данных процедурах нет проверок достижения переменной B своих крайних значений 0 и 255. Это объясняется тем, что длина данной переменной 1 байт, и поэтому при попытке уменьшить значение 0 в переменную будет записано число 255. А при попытке увеличить значение 255 в переменную будет записано число 0. Подобные изменения переменной B приведут к правильным перемещениям курсора на экране.
П о л у ч и т е исходный текст процедуры Edit_command и добавьте его в файл Disp_sec.asm. Исходные тексты процедур Cur_right, Cur_left, Cur_top, Cur_down добавьте в файл Cursor.asm.
Предыдущий раздел | В начало | Следующая глава |