Урок 8: Машинный код и ассемблер
Мы видели, что процессор выполняет команды в цикле выборка-декодирование-выполнение (fetch-decode-execute), но что именно находится внутри этих команд? В самом низу лежит машинный код — поток нулей и единиц, в котором каждая команда состоит из опкода (какую операцию выполнить) и операндов (над чем е
Машинный код — это команды из нулей и единиц, которые выполняет процессор. Ассемблер — это те же самые команды, но записанные короткими именами, которые люди могут читать, — например 'ADD' вместо ряда нулей и единиц.
- Машинный код
- Двоичные команды (последовательности нулей и единиц), которые процессор выполняет напрямую, без дальнейшего перевода.
- Опкод
- Часть команды, которая указывает, какую операцию выполнить (сложить, скопировать, перейти). Название — сокращение от Operation Code.
- Операнд
- Часть команды, которая указывает, над чем действовать: регистр, числовое значение или адрес в памяти.
- Архитектура набора команд (ISA)
- Контракт, который определяет все команды, которые может выполнять процессор, и то, как каждая из них кодируется; реальные примеры — x86 и ARM.
- Ассемблер
- Читаемое человеком представление машинного кода один-к-одному: каждая строка ассемблера соответствует одной машинной команде.
- Мнемоника
- Короткое имя операции в ассемблере, такое как MOV, ADD или JMP, которое заменяет двоичный опкод.
- Регистр
- Крошечная, чрезвычайно быстрая ячейка хранения внутри самого процессора, в которой хранятся значения, над которыми работают команды.
- Кодирование команды
- Точный двоичный шаблон, в который превращается мнемоника вместе со своими операндами, чтобы процессор мог её выполнить.
- RISC против CISC
- Два подхода к проектированию ISA: RISC с небольшим числом простых команд (как ARM), CISC с множеством сложных команд (как x86).
- Переход / ветвление
- Команда, которая меняет, какая команда выполнится следующей, — иногда по условию, — реализуя циклы и условия в машинном коде.