Подтвердить что ты не робот

Как Ассемблеры отображают мнемонические инструкции x86 для двоичных машинных инструкций?

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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