Главная /
Ассемблер /
Для чайников /
Введение в Ассемблер /
Цикл выполнения команды
Программа состоит из машинных команд. Программа загружается в оперативную память компьютера.
Затем программа начинает выполняться, то есть процессор выполняет машинные команды в
той последовательности, в какой они записаны в программе.
Для того чтобы процессор знал, какую команду нужно выполнять в определённый момент,
существует счётчик команд – специальный
регистр, в котором хранится адрес команды,
которая должна быть выполнена после выполнения текущей команды. То есть при запуске
программы в этом регистре хранится адрес первой команды. В процессорах Intel в
качестве счётчика команд (его ещё называют указатель команды) используется регистр
EIP (или IP в 16-разрядных программах).
Счётчик команд работает со сверхоперативной памятью, которая находится внутри процессора.
Эта память носит название очередь команд, куда помещается одна или несколько команд
непосредственно перед их выполнением. То есть в счётчике команд хранится адрес команды
в очереди команд, а не адрес оперативной памяти.
Цикл выполнения команды – это последовательность действий, которая
совершается процессором при выполнении одной машинной команды. При выполнении каждой
машинной команды процессор должен выполнить как минимум три действия: выборку,
декодирование и выполнение. Если в команде используется операнд, расположенный в
оперативной памяти, то процессору придётся выполнить ещё две операции: выборку
операнда из памяти и запись результата в память. Ниже описаны эти пять операций.
- Выборка команды. Блок управления извлекает команду из памяти (из
очереди команд), копирует её во внутреннюю память процессора и увеличивает значение
счётчика команд на длину этой команды (разные команды могут иметь разный размер).
- Декодирование команды. Блок управления определяет тип выполняемой
команды, пересылает указанные в ней операнды в АЛУ и генерирует электрические сигналы
управления АЛУ, которые соответствуют типу выполняемой операции.
- Выборка операндов. Если в команде используется операнд,
расположенный в оперативной памяти, то блок управления начинает операцию по его
выборке из памяти.
- Выполнение команды. АЛУ выполняет указанную в команде операцию,
сохраняет полученный результат в заданном месте и обновляет состояние флагов,
по значению которых программа может судить о результате выполнения команды.
- Запись результата в память. Если результат выполнения команды
должен быть сохранён в памяти, блок управления начинает операцию сохранения данных в памяти.
Суммируем полученные знания и составим цикл выполнения команды:
- Выбрать из очереди команд команду, на которую указывает счётчик команд.
- Определить адрес следующей команды в очереди команд и записать адрес следующей команды
в счётчик команд.
- Декодировать команду.
- Если в команде есть операнды, находящиеся в памяти, то выбрать операнды.
- Выполнить команду и установить флаги.
- Записать результат в память (по необходимости).
- Начать выполнение следующей команды с п.1.
Это упрощённый цикл выполнения команды. К тому же действия могут отличаться в зависимости
от процессора. Однако это даёт общее представление о том, как процессор выполняет одну
машинную команду, а значит и программу в целом.