Сегменты - часть 2
Чтобы понять значение указателя AT, рассмотрим пример. В этом
примере программа использует как Отправную точку систему BIOS, хра-
нящаяся в ПЗУ персональной ЭВМ. Хотя язык ассемблера является очень
эффективным средством программирования, с другой стороны это
довольно трудный инструмент, особенно для больших программ. Поэтому
выбор языка ассемблера обусловливается свойствами, которые делают
его выгодным для решения определенной задачи. В случае IBM PC язык
ассемблера - лучший язык для программирования функций, выполняемых
ROM BIOS. Эти функции можно охарактеризовать как управление устрой-
ствами ввода-вывода, где обычно требуется оперировать с отдельными
битами. Программирование подобных задач сводится к возможности ма-
нипулировать содержимым точно заданных ячеек памяти и портов ввода-
вывода. Язык ассемблера также используется в тех случаях, когда
необходима минимизация размера программы или максимальное быстро-
действие программы. Всем эти требования предъявляет и система ROM
BIOS.
В рассматриваемом примере используется часть BIOS. В одной из
последующих глав будет рассмотрено, как заменять части системы
BIOS. Однако в данном случае нас интересует доступ к наборам
данных, которые использует ROM BIOS. Если вы посмотрите
ассемблерный листинг для ROM BIOS (он приводится в приложении A
технического руководства по IBM PC), то увидите, что сегмент DATA
располагается в сегменте 40H или по абсолютному адресу 400H.
Приведенная на Фиг. 6.12 программа обращается в область данных ПЗУ
системы BIOS c определенной целью. В сегменте DATA имеется
переменная KB_FLAG, которая указывает текущее состояние
переключателя регистров. Одна из жалоб, часто высказываемых по
поводу клавиатуры IBM, состоит в том, что неизвестно, работаете ли
вы в верхнем регистре (CAPS LOCK) или в нижнем. Программа на Фиг.
6.12 считывает значение бита, соответствующего CAPS LOCK, и
Содержание Назад Вперед