Просматривая листинг ROM BIOS, мы
0035 CAPS ENDP
0035 CODE ENDS
END START
Фиг. 6.12 Расположение сегмента (продолжение)
Просматривая листинг ROM BIOS, мы находим переменную KB_FLAG со
смещением 17H в сегменте DATA. Оператор ORG 17H данной программы
задает смещение этой переменной в оттранслированной программе.
Наконец, смысл оператора EQU, определяющего константу CAPS_STATE
следует непосредственно из листинга BIOS ПЗУ. Заданный этой
константой бит указывает текущее состояние переключателя CAPS LOCK.
В приведенной на Фиг. 6.12 программе имеется еще один оператор
SEGMENT. Он определяет сегмент VIDEO с адресом 0B800H. Это
сегментный адрес буфера для адаптера цветного- графического
дисплея. Этот адрес нужен для вывода состояния индикатора на экран
дисплея. Если мы хотим поместить символ в правый верхний угол
экрана, при условии, что строка на экране содержит 80 символов, то
смещение соответствующей ячейки должно быть равно 158 в десятичном
представлении. Программируемые характеристики оборудвания ПК
описываются в гл.8, а пока вы можете принять сказанное на веру.
Первая часть программы устанавливает необходимую адресацию
сегментов. Регистр DS указывает на сегмент DATA, а регистр ES - на
сегмент VIDEO. Хотя в программе эти сегменты объявлены директивой
AT абсолютными, ассемблер все же обозначает их значком "R", как
перемещаемые. Программа LINK, тем не менее, подставляет в
соответствующие поля данных правильные значения.
Программа тестирует переменную KB_FLAG, а ассемблер в
результате генерирует правильное смещение, равное 17H. В данном
примере символ стрелка вниз используется для обозначения обычного
режима, а стрелка вверх обозначает режим CAPS LOCK. Введенные с
клавиатуры символы считываются программой с помощью функции DOS,
Содержание Назад Вперед