Пишем программу начальной загрузки компьютера
Структура второй программы для загрузочного сектора:
- Инициализация сегментных регистров и переменных
- Вывод инструкции на экран
- Подключение своей программы обработки прерывания 1C
- Цикл обработки ввода с клавиатуры
- ожидание нажатия клавиши.
- если нажата клавиша в диапазоне '1'...'9', то меняем цвет символов.
- если нажата клавиша 'Пробел', то выполняем перезагрузку.
- если нажата клавиша 'Esc', то останавливаем систему.
- возврат к началу цикла.
Техника замены стандартного обработчика прерывания
рассмотрена на примере прерывания INT 1C - SYSTEM TIMER TICK. Этот обработчик
вызывается из обработчика прерывания аппаратного
таймера IRQ 0 каждые 55 мсек (примерно 18,2 раза в секунду).
Вектор прерывания по адресу 0:0070 (1Ch*4=70h) указывает на инструкцию IRET,
то есть никакой обработки реально не выполняется.
Заменив значение вектора указателем на свой обработчик мы сможем передать управление своей программе.
Наша программа циклически меняет значение таймера от 9 до 0. Вывод значения таймера на экран
выполняется вне этой процедуры. Возврат по инструкции IRET, то есть с восстановлением регистра флагов.
Обработка кода нажатой клавищи выполняется обычным способом без всяких хитростей.
Однако, размер нашей программы приблизился к 512 байт. Осталось неиспользованными всего 13 байт.
Поэтому, если мы хотим написать более длинную программу, то надо выходить за пределы загрузочного сектора.
В последующем мы рассмотрим разные методы для этого.
Текст программы st2.asm находиться
здесь
[Назад] [↑]