Регистры против памяти
Часть раздела Основы путешествия по Assembly на Coddy — урок 3 из 45.
Теперь вы узнали о двух местах, где данные могут находиться внутри компьютера:
- Регистры — крошечные ячейки памяти внутри CPU
- Память (RAM) — гигантская сетка пронумерованных слотов вне CPU
Но почему их два? Почему процессор не может просто работать напрямую с памятью?
Ответ заключается в скорости. Регистры работают чрезвычайно быстро, потому что они находятся внутри CPU. Память медленнее, потому что она находится снаружи. CPU может получить доступ к регистру за один цикл, но доступ к памяти занимает гораздо больше времени.
Сравнение:
| Характеристика | Регистры | Память (RAM) |
|---|---|---|
| Расположение | Внутри процессора | Вне процессора |
| Скорость | Чрезвычайно высокая (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