Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.200.249.42] |
|
Сообщ.
#1
,
|
|
|
Формат машинных команд IA-32 Сейчас существует несколько сотен языков. Почти все компиляторы при компиляции транслируют программы в язык ассемблера. Ассемблер в свою очередь транслирует программу в особые комбинации нулей и единиц – машинный язык. Таким образом, компьютер понимает только один язык – язык машинных команд. На первых компьютерах все программы писались на машинном языке, но в 50-х гг. стали испольовать символический аналог машинного языка – язык ассемблера. Давайте посмотрим как на уровне формата машинной команды соответсвуют между собой машинные команды и команды ассемблера. Рассмотрим простейшую команду ассемблера: mov ebx, eax На машинном языке это будет выглядеть так: 8B D8 8B – это код операции. Теперь рассмотрим еще один пример: mov ecx, 128 А на машинном языке ей соответсвует: B9 00000080 Код операции – B9. Отсюда можно сделать вывод, что прямого соответсвия между структурой команды ассемблера и соответсвующей машинной команды нет. Хотя команда одна и та же, коды операции разные. Большинство команд ассемблера имеют несколько возможных вариантов сочетания операндов. Это говорит о том, что машинная команда всегда однозначна по отношению к производимым ею действиями на уровне аппаратуры. Код операции является номером микропрограммы в блоке микропрограммного управления для каждой конкретной команды ассемблера с каждым конкретным вариантом сочетания операндов. Логически любая команда ассемблера содержит несколько элементов: 1.Элемент, опиывающий, что делать, называется кодом операции(далее КОП). 2.Элементы, описывающие объекты, с которыми нужно что-то делать, называются операндами. Операнды могут не задаваться, а подразумеваться по умолчанию 3.Элементы, описывающие, как делать, называются типами операндов и обычно задаются неявно. |