80.1.4.2. АССЕМБЛЕРЫ
THIS SECTION IS UNDER CONSTRUCTION
Ассемблер - программа переводящая мнемонические коды для конкретной машины в
машинное представление.
Команда может иметь разную длинну - зависит от операнда
Если операнд метка, то возможна короткая форма (зависит от CPU)
Поэтому практически всегда 2 прохода.
Например:
jmp L1 ; не знаем где находиться L1
... ; возможны формы:
; jmp short L1
; jmp near L1
; они имеют разный размер
L1:
Объектные файлы
Информация которая кладется в объектные файлы.
Описание секций
code/data/bss
аттрибуты: (RO/RW, Executable, Loadable)
Описание символов:
Имя символа
Номер секции
Смещение в секции
Тип символа
Локальный (виден только в этом модуле)
Глобальный
public (определен в этом модуле, виден наружу)
extern (определен снаружи(
Описание ссылки на символ:
Назначение ссылки
Символ
Место ссылки
Номер секции
Смещение в секции
Тип фиксапа
Зависит от платформы очень сильно
Относительный
Абсолютный
IP-относительный
итд.
call _printf
Тип фиксапа: Relative 32
Код: E8 00 00 00 00
+---------------+
Fixup area
Ссылка: _printf
mov eax, [label1 + 4]
Тип фиксапа: Absolute 32
A1 04 00 00 00
==============
Fixup area
Ссылка: label4
add rax, [label1 + 4]
48 01 05 04 00 00 00
=========== ^
^ Fixup area |
| IP of next instruction
IP of current instruction
Тип фиксапа: IP Related (за 4 байта до next IP)
TODO: x64 IP-based fixups
Как работает ассемблер
Основной ход
Прочитать команду
В зависимости от команды
директива
END
закончить
SECTION
начать новую секцию с указанными свойствами
ORG
поставить новый текущий адресс в текущей секции
DB/DW/DD
прочитать данные
записать данные в текущую секцию начиная с тек адресса
PUBLIC/EXTERN
поставить информацию о метке
метка
занести в таблицу описания символов
инструкция
определить размер
выложить код в текущую секцию начиная с текущего адресса
если код использует внешние метки
создать ссылку на символ
заполнить необходимыми данными fixup
Пост-процессирование
Записать таблицы и секции в файл в нужном формате
(В некоторых случаях предварительно разрешив локальные ссылки)
Index Prev Next