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






    Листинг BIOS дан в приложении A технического описания IBM PC.  Этот
    листинг - описание модуля ПЗУ объемом 8K, расположенного по
    адресам, начиная с 0FE000H в адресном пространстве микропроцессора
    8088.  Этот модуль ПЗУ - один из пяти модулей, размещенных на
    системной плате фирмой IBM.  Другие четыре модуля ПЗУ содержат в
    себе интерпретатор с языка Бейсик.    Исходные тексты программ
    Бейсика, так же, как и DOS, являются частной собственностью фирмы и
    не печатаются в техническом описании.  Но тексты программ входящих
    в BIOS фирма IBM опубликовала, так что каждый может изучить
    интерфейсы с BIOS.
 
      Листинг ассемблера в приложении A - это полный листинг
    содержимого ПЗУ. Это не листинг Макроассемблера фирмы IBM потому,
    что в то время, когда фирма IBM разрабатывала BIOS, Макроассемблер
    не существовал. Для разработки BIOS использовался Макроассемблер
    фирмы Intel, с помощью которого получился данный листинг. Ассемблер
    фирмы Intel идентичен ассемблеру фирмы IBM в использовании и
    синтаксисе. Как вы видите, ассемблер фирмы Intel не печатает в том
    же виде адресное поле, а также отличается некоторыми
    псевдооперациями ассемблера. Но с этими небольшими отличиями
    работать будет не сложно.
 
      В листинге программы BIOS описаны шесть различных сегментов. Из
    них по-настоящему интересны для нас лишь три. Сегмент ABS0,
    расположенный по адресу 0, содержит векторы прерываний, с которыми
    имеет дело BIOS и процедура POST. В этом сегменте нет никаких
    определений данных; он просто отводит место векторам. Эта область
    попадает в ОЗУ, и поэтому программа BIOS должна инициализировать ее
    после включения питания. Сегмент DATA, расположенный в параграфе
    40H или по абсолютному адресу 400H, определяет все поля данных,
    используемых в BIOS. Аналогично этот сегмент определяет места
    переменных, но не их начальные значения. Наконец, сегмент CODE
    начинается в параграфе 0F000H. В первых 56K байтах этого сегмента
    ничего нет, первый байт сегмента CODE имеет абсолютный адрес
    0FE000H или смещение 0E000H в сегменте. Эти данные, от 0FE000H до
    0FFFFFH, представляют содержимое модуля ПЗУ с BIOS объемом 8K. Эти
    программы вместе с ПЗУ с Бейсиком - единственные, которые
    содержатся в машине в момент начала работы.
 
      Еще одно замечание. Фирма IBM не разрабатывала BIOS в виде
    одного большого исходного текста. Каждая функция была разработана в
    виде отдельного модуля, а затем модули были связаны вместе,
    сформировав BIOS. Возможно вы увидите некоторые связки в программе.
    Для публикации фирма IBM скомбинировала все исходные тексты в один
    большой исходный текст и ассемблировала его. Такое единое
    ассемблирование позволило показать абсолютные адреса каждой функции
    BIOS.