Как работают инструкции
Часть раздела Основы путешествия по Assembly на Coddy. Урок 4 из 45.
Вы знаете, что CPU выполняет инструкции одну за другой. Но как CPU узнаёт, какую инструкцию выполнить next? Где хранятся инструкции? И как на самом деле выглядит инструкция?
Инструкции — это числа.
Это фундаментальная истина о компьютерах. Всё является числом. Данные, с которыми вы работаете (например, число 42), являются числом. Адрес, по которому хранятся данные (например, 1000), является числом. И сами инструкции (например, mov, add, cmp) также являются числами.
Когда вы пишете код на языке ассемблера, например mov rax, 5, ассемблер преобразует этот понятный человеку текст в число, которое понимает CPU. Это число называется кодом инструкции.
Где хранятся инструкции?
Инструкции хранятся в памяти так же, как и данные. Для инструкций нет отдельного места. В памяти хранятся и:
- Данные (числа, символы, массивы)
- Инструкции (сама программа)
CPU не знает разницы. Он просто читает всё, что находится по адресу памяти, на который указывает Program Counter. Вы кратко узнали о PC в уроке 0.1. Теперь пришло время точно понять, как он работает.
Счётчик команд (также называемый указателем команд) — это специальный регистр внутри CPU. Его единственная задача — хранить адрес памяти следующей инструкции, которую необходимо выполнить.
Цикл выборки и выполнения:
ЦП бесконечно повторяет следующие три шага:
| Шаг | Что происходит |
|---|---|
| 1. FETCH | Read инструкцию по адресу, указанному в PC |
| 2. EXECUTE | Perform эту инструкцию |
| 3. ADVANCE | Move PC к следующей инструкции |
Простой пример:
Если PC = 1000, CPU:
- извлекает инструкцию по адресу 1000
- выполняет её
- перемещает PC к следующему адресу (1000 + размер инструкции)
Затем это повторяется с новым значением PC.
Как выглядит инструкция:
Каждая инструкция состоит из двух частей:
| Часть | Что она делает | Пример |
|---|---|---|
| Опкод | Что нужно сделать | mov, add, cmp |
| Операнды | С чем это нужно сделать | rax, 5, [result] |
Некоторые инструкции имеют один операнд (например, inc rax, чтобы прибавить 1). Некоторые имеют два (например, mov rax, 5). Некоторые имеют три (например, add rax, rbx, rcx в некоторых архитектурах).
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Машина
Что такое CPUПамятьРегистры против памятиКак работают инструкцииПаттерн двух файловАрхитектура x86-64Потренируйтесь самостоятельно: Песочница Assembly