8086 Ассемблер - Генерация объектного кода из кодов операций - PullRequest
3 голосов
/ 08 августа 2010

Я работаю на ассемблере для 8086.Мой вопрос состоит в том, как преобразовать шестнадцатеричные коды операций в исполняемый файл, например .EXE, .ELF, .COM, a.out и т.ОС автоматически?

Ответы [ 3 ]

8 голосов
/ 08 августа 2010

Это довольно сложно, и обычно включает в себя два шага:

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

Таким образом, ассемблер обычно не выводит исполняемые файлы; вам нужно выбрать формат объектного файла и прочитать о том, как его сгенерировать. Теоретически, до тех пор, пока вы выводите действительный объектный файл в заданном формате, любой компоновщик должен иметь возможность выполнять фактический процесс компоновки, но обычно ассемблеры и компоновщики поставляются в виде набора, поэтому я не уверен, насколько хорошо он будет на самом деле практическая работа (например, GNU-ассемблер (газ) выводит специфичные для GNU перемещения и секции, которые компоновщик GNU (ld) знает, как обрабатывать, поэтому вы не можете использовать генерируемые газом объектные файлы в любом другом компоновщике)

ELF описан в разделе 4 SV ABI , хотя вам также необходимо прочитать приложение к вашему процессору. COFF задокументирован как часть спецификации PE, хотя я нигде не могу найти его в Интернете; если вам это нужно, я могу выложить куда-нибудь

1 голос
/ 08 августа 2010

Это немного зависит от (целевой) платформы, но для формата Windows PE (EXE) ваша задача состоит в том, чтобы создать obj-файлов и позволить компоновщику сделать все остальное.

0 голосов
/ 08 августа 2010

Вот статья, в которой обсуждаются некоторые исполняемые форматы.Это должно помочь вам начать работу, если вы работаете в Windows.

http://en.wikibooks.org/wiki/X86_Disassembly/Windows_Executable_Files

...