Как ассемблеры отображают мнемонику инструкций x86 в двоичные машинные инструкции? - PullRequest
11 голосов
/ 03 мая 2010

Я заинтересован в написании ассемблера x86. Мне интересно, как можно сопоставить мнемонические инструкции по сборке x86 (используя синтаксис, подобный Intel) в соответствующие инструкции двоичного машинного кода.

Ответы [ 3 ]

10 голосов
/ 03 мая 2010

Вы хотите понять физическое отображение мнемоники в машинный код? В этом случае тома 2A и 2B справочного руководства Intel IA32 / IA64 описывают двоичный формат машинного кода x86.

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

Однако, если вы спрашиваете о том, как выполнить синтаксический анализ текстового файла с кодом сборки, чтобы достичь точки, в которой ваша программа может начать писать машинный код, тогда вам, по сути, нужно понять, как написать компилятор. Инструменты lex и yacc - хорошие места для начала, но если вы не знаете, как создать компилятор, вам также понадобится книга. Я думаю, что Книга Дракона является лучшей, но есть множество других книг, которые вы могли бы использовать, поэтому у SO есть множество рекомендаций.

5 голосов
/ 03 мая 2010

Для x86 это чертовски сложно. Немного менее сложный, так как 32-битные процессоры вступили во владение, но да. Все еще боль.

Возможно, вы захотите взглянуть на нос (http://www.nasm.us). Это 32-битный ассемблер с открытым исходным кодом. Посмотрите, как они это делают. Или используйте это вместо. :)

2 голосов
/ 03 мая 2010

Это просто прямое сопоставление один к одному; Документация Intel описывает все инструкции и их кодировки. Вам нужно будет создать гигантскую таблицу поиска или что-то эквивалентное для сопоставления и генерации кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...