ZX Format #03
29 февраля 1996
  IS-DOS  

IS-DOS - "Формат объектных модулей *.obj IS-DOS Ассемблера".

<b>IS-DOS</b> -
Рубрика "IS-DOS - программистам" No 3

            Прокопенко С. В.
        под ред. Елисеева В. А.

    "Формат объектных модулей *.obj
           IS-DOS Ассемблера"
________________________________________

     В этой статье рассматривается  фор-
мат объектных модулей, принятый в систе-
ме IS-DOS и поддерживаемый IS-DOS Ассем-
блером и компоновщиком  объектных  моду-
лей link.com. Этот формат является  офи-
циальным стандартом IS-DOS. Если Вы  за-
хотите перенести в IS-DOS готовые объек-
тные модули из других операционных  сис-
тем (например  CP/M  80),  или  написать
свой собственный транслятор  какого-либо
языка высокого уровня,  мы  настоятельно
рекомендуем  Вам  придерживаться   этого
формата, что позволит  добиться  совмес-
тного использования Ваших  разработок  с
IS-DOS Ассемблером и  упростит  создание
готовых библиотек процедур для IS-DOS.

     Статья  адресована  прежде    всего
программистам-профессионалам и разработ-
чикам программного обеспечения, желающим
создавать   инструментальные    средства
программирования для IS-DOS.
            ________________

     Файлы  в  формате  *.obj  создаются
IS-DOS  Ассемблером  и  служат  входными
файлами для компоновщика link.com.

     В задачу link.com  входит  создание
загружаемого кодового  модуля  *.com  из
одного или нескольких объектных модулей,
полученных трансляцией текстов программ.

     Объектный  файл  *.obj  состоит  из
нескольких областей, с длинами и относи-
тельными смещениями от начала файла, оп-
ределенными в его первых 32 байтах  (см.
табл 1):

                            Таблица 1.
   Описание областей объектного файла
----------------------------------------
смещ.  длина          значение
----------------------------------------
  0,1    (2) - ссылка на область гло-
               бальных символов модуля -
               область [1] (смещение от
               начала файла)
  2,3    (2) - длина этой области

  4,5    (2) - ссылка на область слож-
               ных относительных выра-
               жений, определяющих гло-
               бальные символы модуля -
               область [2] (смещение от
               начала файла)
  6,7    (2) - длина этой области

  8,9    (2) - ссылка на область про-
               граммного кода область
               [3] (смещение от начала
               файла)
10,11    (2) - длина этой области

12,13    (2) - ссылка на область ад-
               ресов настраиваемых
               ячеек модуля и остав-
               шихся невычисленными во
               время трансляции выра-
               жений, определяющих
               значения этих ячеек
               область [4] (смещение от
               начала файла)
14,15    (2) - длина этой области

16-29   (14) - резерв

30-31    (2) - контрольная сумма пер-
               вых 30 байт файла.
---------------------------------------

     Контрольная сумма  считается  стан-
дартным для IS-DOS способом: в  двухбай-
товой ячейке  суммируются  значения  от-
дельных байтов файла.

     Далее в объектном модуле идут пере-
численные выше области в  названном  по-
рядке. Для компоновщика link.com  важно,
чтобы  первой  следовала  область   гло-
бальных символов (со смещением от  нача-
ла файла = 32). Порядок  следования  ос-
тальных областей не важен.
            ________________

     Область 1. Глобальные символы,
     определенные в данном модуле.

     Все глобальные символы модуля поме-
щаются в эту область в виде 16  байтовых
записей в  формате,  близком  к  формату
таблицы глобальных символов *.gtb. Отли-
чия касаются только значений символов  и
тегов (*) этих значений. (см. табл. 2)

--------------
(*) Тег (англ. tag - ярлык, зтикетка)  -
часть элемента  данных  (один  или  нес-
колько разрядов слова), определяющая его
тип. (прим. ред.)
--------------
                          Таблица 2.
 Структура области глобальных символов.
----------------------------------------
  смещ.  длина          значение
----------------------------------------
   0,1    (2)   - ссылка на предыдущую
                  запись
   2,3    (2)   - ссылка на следующую
                  запись
     4    (1)   - число знаков в
                  имени символа (N)
     5    (N)   - знаки имени символа
                  (символы)
   5+N    (1)   - тег значения символа
   6+N    (2)   - значение символа
----------------------------------------

 Возможные теги значения символа:

 1 - символ определен через  внешнее  по
     перемещаемости  выражение,  которое
     должно быть записано  в  области  2
     объектного модуля.  В  этом  случае
     байты по смещению 6+N  и  6+N+1  не
     определены.

     В остальных случаях  само  значение
 символа находится в слове  по  смещению
 6+N.

 %10000000 - тег  абсолютного   значения
     символа.

 %1******* - тег   относительного    или
     сложного  относительного   значения
     символа, где ******* - степень  от-
     носительности (см. описание  ассем-
     блера п.п.3.5.1, перемещаемость при
     вычислении   выражений).    Относи-
     тельные значения определяются отно-
     сительно начала модуля.

     Степень относительности здесь - это
число перемещений, т.е.  число,  опреде-
ляющее сколько раз адрес  модуля  должен
быть добавлен или вычтен  к/из  значения
символа при компоновке на конкретный ад-
рес. Это число определяется  как  7-раз-
рядное число со знаковым разрядом в  би-
те номер 6.
     Здесь бит 6 играет ту же роль,  что
и бит 7 в 8-разрядном знаковом числе.
     Таким образом, если 6 бит =  1,  то
адрес модуля будет не добавлен,  а  выч-
тен из значения символа при компоновке.

     Например, после определения  в  ас-
семблере $MET EQU -$ ($-ссылка на  прог-
раммный счетчик) $MET в объектном  файле
получит значение тега #FF, и при  компо-
новке адрес модуля будет вычтен из  зна-
чения $MET один раз.
            ________________

  Область 2. Внешние по перемещаемости
   выражения для глобальных символов,
     определенных в данном модуле.

     Выражения должны  быть  записаны  в
постфиксной (*) форме,  отделяться  друг
от друга кодом 9 и лежать в том  же  по-
рядке, что и глобальные символы, ссылаю-
щиеся на эти выражения.

--------------
(*) Постфиксная форма записи выражений -
это форма, при которой  сначала  записы-
ваются операнды, а  потом  -  операторы,
например 2 4 + вместо 2 + 4. (Прим. ред.)
--------------

     Операнды  записываются  в  стандар-
тной форме (см. табл. 4 в разделе  "Фор-
мат выражений"). В качестве примера  та-
кого выражения можно привести следующее:
     Пусть MET - метка со  смещением  от
начала модуля #33.
     Для  глобальной  метки  $met    EQU
MET/256 в объектный файл будет  помещено
такое выражение в область 2 (hex формат):

 80 33 00 80 00 01 2F.
    #33       256  /
            ________________

   Область 3. Программный код модуля.

     Область должна  содержать  програм-
мный код процессора с точностью до  нас-
траиваемых значений байтов и слов.  При-
чем должны быть определены  все  относи-
тельные 2х байтовые значения. Байты,  не
определенные в модуле, или  определенные
как внешние,  сложные  относительные,  а
также относительные, но не  2х  байтовой
длины, могут иметь любое  значение  (ас-
семблер записывает туда 0).
            ________________

      Область 4. Адреса и значения
      настраиваемых ячеек модуля.

     Область состоит из  записей,  (воз-
можны два типа), и должна  оканчиваеться
4 байтами #FF.

             Типы записей:

     1.Адреса 2-х байтовых ячеек с отно-
сительным значением.

     Например,  во  фрагменте  MET:   LD
HL,MET значение по  адресу  MET+1  будет
простым относительным (в регистр  загру-
жается значение метки), и поэтому  адрес
MET+1 должен быть записан  в  4  область
как запись типа 1. Этот адрес  представ-
ляет собой смещение относительно  начала
области кода объектного модуля  до  нас-
траиваемой ячейки. В  этом  случае  нас-
траиваемое относительное значение  будет
лежать по данному адресу в области  кода
модуля. Поэтому для настройки 2-х байто-
вой ячейки достаточно  знать  ее  адрес.
Это,практически, наиболее  часто  встре-
чающийся тип настраиваемых значений  при
компоновке модулей.

     2. Все остальные адреса ячеек, зна-
чения которых не определились  до  конца
во время трансляции (вместе с выражения-
ми, определяющими эти значения).  Формат
этой записи следующий (см. табл.3)

                          Таблица 3
  Формат адресов настраиваемых ячеек.
----------------------------------------
 смещ.  длина          значение
----------------------------------------
  0,1   (2) - #FFFF - признак нача-
              ла записи для отличия от
              записи типа 1.
  2     (1) - тег определяемого зна-
              чения:
              0 - 2-х байтовое слово
              1 - 1 - байтовая ячейка
              2 - ячейка - аргумент
                команд короткого пере-
                хода типа
                JR AAA; JR  CC,AAA; где
                CC-условие перехода.
              3 - номер бита (для любых
                команд битовых операций)
              4 - тип прерывания (аргу-
                мент команды IM )
              5 - номер рестарта (аргу-
                мент команды RST)

  3,4   (2) - адрес настраиваемой
              ячейки (то же самое, что
              и в случае записи типа 1)
  5-... ... - выражение в постфиксной
              форме (подробности см.
              ниже под заголовком "Фор-
              мат выражений").
   ...  (1) - код 9 - признак конца
              выражения.
----------------------------------------


           Формат выражений.

     Для увеличения скорости  вычисления
выражений при компоновке их принято  за-
писывать в постфиксной форме, т.е.  ког-
да операторы следуют после  своих  аргу-
ментов.

Распознаются следующие операторы:

Бинарные:

+  2B сложение
-  2D вычитание
*  2A умножение
/  2F деление
'&  26 поразрядное логическое "и".
@  40 поразрядное логическое "или".
!  21 поразрядное логическое исклю-
      чающее "или".
?  3F оператор MOD

Унарные:

,  2C минус (изменение знака числа)
^  5E возведение в квадрат (2^)

  Формат  записи  аргументов   следующий
(см. табл 4.)

                           Таблица 4.
     Формат операндов в выражениях.
----------------------------------------
  смещ.  длина значение
----------------------------------------
   0       1  - Тег значения аргумента.
   1       2  - Числовое значение аргу-
                мента.
      или
   1       N  - Символьное значение
                аргумента длины в N зна-
                ков, применяется для
                включения в выражение
                неопределенных в модуле
                символов. N может быть
                от 1 до 6.
----------------------------------------

Типы тегов:

 Если старший бит - 1, то аргумент
     имеет числовое значение.

 %10000000 - значение аргумента аб-
     солютное

 %1******* - относительное  или  сложное
     относительное  значение   аргумента
     степени ******* (о степени см. опи-
     сание области 1).

 Если старший бит - 0, то  аргумент  яв-
     ляется неопределенным в модуле сим-
     волом, и тег определяет число  пос-
     ледующих за ним знаков символа.

     Например, в теге %00000*** звездоч-
ки означают число знаков в символе.  Это
число может быть от 1 до 6.

       Примеры записи выражений:

Выражение

            <MET+1>/256'&2^3,

где MET - метка с  относительным  смеще-
нием в модуле  #10,  будет  выглядеть  в
объектном модуле как следующая строка  в
hex формате:

81 10 00 80 01 00 2B 80 00 01 2F
  MET        1    +     256   /

80 03 00 5E 26
   3    2^ '&

81 - тег относительного значения  степе-
ни 1 (для метки MET).

80 - тег абсолютного значения для  чисел
1, 256 и 3.

Выражение

               2*<MET+1>,

где MET - не определенный в модуле  сим-
вол, будет выглядеть в объектном  модуле
как следующая строка в hex формате:

80 02 00 03 4D 45 54 80 01 00 2B 2A
    2       M   E  T     1    +  *

80 - тег абсолютного значения для  чисел
2 и 1.

03 - тег символьного значения для  неоп-
ределенного символа MET из 3 знаков.
________________________________________



Другие статьи номера:

IS-DOS - "IS-DOS - начинающим" No 3

IS-DOS - "Оконная система IS-DOS".

IS-DOS - "Формат объектных модулей *.obj IS-DOS Ассемблера".

IS-DOS - "Формат таблицы локальных символов IS-DOS Ассемблера".

Авторы журнала - ZX-Format No.3

Железо - Исправление ошибки TR-DOS.

Железо - новая звуковая карта: General Sound.

Железо - новая модель Спектрума: Scorpion ZS 256 Turbo+.

Железо - о турбировании Спектрум-машин.

Железо - обзор модемов для ZX Spectrum.

Железо - Шинная архитектура Спектрума (концептуальная разработка).

Игрушки - "Last battle" (Последняя битва) подробное описание.

Игрушки - 48 утюгов (второй уровень).

Игрушки - десятка наиболее продаваемых в С.-Петербурге.

Игрушки - описание игры BATMAN-II.

Игрушки - что новенького: The Light Corridor, Jonny Quest in Doctor Zins, Bedlam, Bubble Dizzy, Navy Seals, Пираты.

Конкурс - конкурс на компьютерный анекдот.

Лотерея - лотерея для читателей журнала.

От авторов - о третьем выпуске журнала.

Отдохнём - HУ, ЮЗЕР, ПОГОДИ!

Отдохнём - глюкодром: Самые ОПЕЧАТКИ.

Помощь - Очередной трактат об очердной оболчке и не только.

Почтовый ящик - дискуссия.

Почтовый ящик - доска обьявлений.

Почтовый ящик - письма читателей.

Премьера - TASM 4.0 (Turbo ASseMbler for ZX-Spectrum 128k)

Премьера - Приключения ВИННИ ПУХА.

Программистам - Basic для всех №3.

Программистам - Адаптация игр: адаптация программ на диск.

Программистам - Адаптация игр: зыкрытые коды.

Программистам - адаптцация игр: бессмертия.

Программистам - ассемблер: Экскурс в анатомию ZX

Разное - Amiga: вопросы и ответы.

Разное - Амига: новости.

Разное - Перспективы П/О.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Игрушки - обзор новинок: Los Angeles Drugs Bust, Jungle Warfare, Dragonia, 3D Starfighter, Rock star ate my hamster, Star Cobtrol, Malstese joe's pool challenge, Dynamite dux, Blood Brodthers, Galactic Games, Motor Masscre, International Kickboxing.
BRAVO на отдых - Рассказы : Автобус, Ода комару.
Ferrum! - схема модема KrVicomm v1.0.
Новости от DITRONIK - BBS CYBORG'а до сентября не работает.
Разборки - прохождение адвентюрной игры Virtue dа dirty sоul.

В этот день...   28 декабря