Вход в систему

Лекции по курсу "Проектирование ассемблеров, компоновщиков, макропроцессоров

13. Пример работы однопросмотрового ассемблера по схеме 1А / МД

 

Работа однопросмотровых ассемблеров, производящих объектные программы, несколько отличается от описанной ранее. Как и прежде, ссылки вперед заносятся в список. Однако теперь, когда будет встречено определение имени, команды, ссылающиеся на это имя, могут уже отсутствовать в оперативной памяти и, следовательно, будут недоступны для модификации. В общем случае они будут уже записаны на внешнее устройство как часть тела объектной программы. Поэтому ассемблер должен сгенерировать другую запись тела программы с соответствующим адресом команды, а загрузчик занесет этот адрес в команду во время загрузки программы.

Объектный код на магнитном диске состоит из записей 3 видов:

  • записи типа Т содержат объектный код;
  • записи типа М содержат модификатор;
  • записи типа A содержат адрес точки входа.

Современные ассемблеры строят перемещаемый код.

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

LOC - Location - положение (счетчик размещения).


LOC Исходный текст

Объектный код
на магнитном диске

Адрес основной
памяти
Объектный код
после загрузки
Объектный код
после окончательной
коррекции
  dseg segment   50 00 03 00 ...  
0 arr dw 3, -5, -7, 92 03 00      
A mes db 'положительных чисел'        
23 dseg ends        
0 cseg segment        
0 assume cs:cseg, ds:dseg        
0 N dw 5 05 00 50 03:00 05 00  
02 start: mov ax,dseg B8 00 00 50 03:02 B8 00 00  
05 mov ds,ax 8E D8 8E D8   B8 00 50
07 mov cx,N 2E: 8B 0E 00 00      
0C mov bx,0 BB 00 00      
0F mov dx,bx 8B D3      
11 again: cmp arr[bx],0 83 BF 00 00 00      
16 jle les_or_eq 7E 00 50 04:00 7E 00 7E 01
18 inc dx        
19 les_or_eq: add bx,2        
  ...        
  int 21h        
  cseg ends        
  end start        


В таблице подчеркнуты приближенные байты, т.е. байты, значения которых точно не определены.

Таблица имен:

В таблицу Group&Segments заносятся имена используемых сегментов, их характеристики и адреса.


M Что корректировать? Длина На сколько? Направление
Параграф Байт
M1 3 3 2 0 0 +
M2 4 1 1 19 - 18 = 1 +
A 3 2        
Введение
Причины использования языка ассемблер
Причины неиспользования языка ассемблер
Синтаксис ассемблера
Системное программное обеспечение и структура ЭВМ
Программная модель процессора Intel 8086
Организация работы памяти
Операнды
Адресация операндов
Формат машинных команд
Команды переходов
Типы ассемблеров. Функции ассемблера
Ассемблер по схеме 1А / ОП
Ассемблер по схеме 1А / МД
Двухпросмотровый ассемблер
Многопросмотровый ассемблер
Загрузчик
Структура объектных файлов. Основные понятия
Идентификация модуля и атрибуты
Концепция привязки
Объектный файл. Последовательность записей
Объектный файл. Формат записей
Формат записей THEADR и LHEADR
Формат записи LNAMES
Формат записи SEGDEF
Формат записи GRPDEF
Формат записи PUBDEF
Формат записи COMDEF
Формат записи LOCSYM
Формат записи EXTDEF
Формат записи LINNUM
Формат записи LEDATA
Формат записи LIDATA
Формат записи FIXUPP
Формат записи MODEND
Формат записи комментариев


исполнялось 0,449917 c, запросов к базе 6