Assembler для начинающих


         

Просматривая листинг 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,

Содержание  Назад  Вперед