Регистры против памяти
Часть раздела Основы путешествия по Assembly на Coddy. Урок 3 из 45.
Теперь ты узнал о двух местах, где могут храниться данные внутри компьютера:
- Регистры: крошечные ячейки хранения внутри CPU
- Память (RAM): огромная сетка пронумерованных ячеек за пределами CPU
Но почему есть два места? Почему ЦП не хранит всё в памяти?
Ответ — скорость. Регистры чрезвычайно быстры, потому что находятся внутри ЦП. Память работает медленнее, потому что она находится снаружи. ЦП может получить доступ к регистру за один такт, а доступ к памяти занимает гораздо больше времени.
Сравнение бок о бок:
| Характеристика | Регистры | Память (RAM) |
|---|---|---|
| Расположение | Внутри CPU | За пределами CPU |
| Скорость | Очень высокая (1 цикл) | Ниже (много циклов) |
| Количество ячеек хранения | Очень мало (16–32 на x86-64) | Миллионы или миллиарды |
| Размер каждой ячейки | 8 байт (64 бита) | 1 байт |
| Как к ним обращаться | По имени (rax, rbx, rcx...) | По адресу (1000, msg, buffer) |
| Энергозависимость? | Да (данные исчезают при отключении питания) | Да (данные исчезают при отключении питания) |
Самое важное правило в ассемблере:
Инструкция может использовать не более одного операнда в памяти. Чтобы объединить два значения, которые оба находятся в памяти, сначала загрузите одно из них в регистр.
Регистры — это также место, где хранятся значения, с которыми вы работаете, потому что каждое обращение к памяти происходит медленно.
Шаблон из трёх шагов, который ты будешь постоянно использовать:
| Шаг | Что происходит | Пример |
|---|---|---|
| 1. LOAD | Копирование данных из памяти в регистр | mov rax, [count] |
| 2. WORK | Выполнение действия с регистром | add rax, 5 |
| 3. STORE | Копирование результата обратно в память (если необходимо) | mov [result], rax |
Что произойдёт, если ты забудешь это правило?
Если ты попытаешься сложить два числа, которые оба находятся в памяти, ассемблер выдаст ошибку. ЦП не может этого сделать. Сначала ты должен загрузить одно из них в регистр.
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Машина
Что такое CPUПамятьРегистры против памятиКак работают инструкцииПаттерн двух файловАрхитектура x86-64Потренируйтесь самостоятельно: Песочница Assembly