Предыдущий раздел | РЕДАКТИРОВАНИЕ ИНФОРМАЦИИ В ОП | Следующая глава |
Редактирование сектора выполняет процедура Edit_sector, инициируемая диспетчером при нажатии клавиши <F4>. После того, как процедура Edit_sector запущена, она, во-первых, выполняет обработку своих команд. Такими командами являются клавиши <F4> и <Esc>, выполняющие завершение функции редактирования, а также клавиши, выполняющие управление курсором:
→ – переместить курсор на одну позицию вправо;
← – переместить курсор на одну позицию влево;
↑ – переместить курсор на одну позицию вверх;
↓ – переместить курсор на одну позицию вниз.
Во-вторых, процедура Edit_sector может выполнить редактирование любых четырех битов (тетрады) переменной Sector. Для этого она вводит с клавиатуры двоичный код шестнадцатеричной цифры и помещает его в качестве той тетрады переменной Sector, на которую в данный момент времени указывает курсор монитора (экрана).
Алгоритм процедуры Edit_sector приведен на рис.49. Этап «Вывод Sector» реализуется путем вызова процедуры Disp_sector. Для того чтобы выполнить этап «Инициализация курсора», обнуляются две переменные, используемые для управления внутри процедуры Edit_sector:
1) B (длиной 1 байт) – номер редактируемого байта в глобальной переменной Sector;
2) Nt (длиной 1 байт) – номер (0 или 1) редактируемой тетрады в байте.
Рис. 49. Алгоритм процедуры Edit_sector
Далее вызывается процедура Set_cursor, выполняющая установку курсора в ту позицию экрана, которая соответствует переменным B и Nt.
Этап «Ожидание нажатия клавиши» реализуется с помощью известного нам системного вызова BIOS – “int 16h”, функция 0. Напомним, что данный вызов возвращает в регистре AL код ASCII нажатой клавиши, а в AH – скан-код клавиши. Определение управляющего символа производится по наличию у клавиши нулевого скан-кода.
Если управляющая клавиша не является клавишей <F4>, то производится исполнение соответствующей команды путем вызова процедуры Edit_command, рассматриваемой ниже. Что касается клавиши <Esc>, то она не отнесена к управляющим клавишам, так как ее ASCII-код ненулевой – 1Bh. Так как скан-код клавиши <Esc> – 01h, то для проверки нажатия клавиши <Esc> следует сравнить содержимое регистра AX с числом 011bh.
Для проверки того, что введенный символ является шестнадцатеричной цифрой, можно воспользоваться слегка переделанной процедурой ввода шестнадцатеричной цифры Read_digit_hex, разработанной ранее. Переделанная процедура должна не сама вводить символ с клавиатуры, а получать его ASCII-код в качестве входного параметра. Естественно, что следует изменить название процедуры.
Что касается записи шестнадцатеричной цифры в переменную Sector, то для этого требуется разработать новую процедуру – Write_digit_sector.
Последними двумя этапами процедуры Edit_sector являются инициализация курсора и вывод переменной Sector на экран, для реализации которых используются соответственно процедуры Set_cursor иDisp_sector. Может показаться странным выполнение инициализации курсора в конце алгоритма редактирования сектора, так как другие наши процедуры курсор не используют. Наличие данного этапа обусловлено следующим. Вспомним, что курсор указывает на ту позицию экрана, в которой будет выведен следующий символ. Поэтому вывод на экран строки символов, выполняемый процедурой Disp_sector, также начинается с позиции, отмеченной курсором.Если не установить курсор в верхний левый угол изображения, то часть этого изображения не будет показана. Можете проверить это практически.
П о л у ч и т е исходный текст процедурыEdit_sector и добавьте его в файл Disp_sec.asm.
Предыдущий раздел | В начало | Следующая глава |