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