Найти тему
Young programmer

Регистры процессора или как разговаривает компьютер

Да, это правда компьютер разговаривает сам с собой. Причем так же, как и мы словами, но об этом ближе к концу статьи. Сегодняшняя наша статья будет посвящена регистрам. Разберемся как они устроены, для чего нужны, и каких типов бывают.

процессор говорит какому регистру передаёт данные
процессор говорит какому регистру передаёт данные

Как устроен регистр

Легче всего представить регистр как одноэтажное здание с пронумерованными окнами, расположенными друг за другом, причем нумерация начинается с цифры «0» (ноль) и самого правого окна. Каждое окно в данном примере обозначает бит. И если в окне горит свет значит бит имеет значение «1», иначе «0». Регистры устроены в современных процессорах как матрешка. То есть у нас есть регистры размером в байт (8 бит) AH (Старший байт) и AL (Младший Байт). Которые объединяются в регистр размерности Слово (2 Байта или 16 бит) AX. Далее регистры не складываются, а увеличиваются. Это связанно с тем, что программы, написанные для 16-битных процессоров должны работать на 32-битных и 64-битных. А программы, написанные для 32-битных процессоров соответственно должны работать на 64-битных. Так решила компания Intel выпустив процессор i80386 в 1985 году. Дальше идет регистр EAX размерности Двойное Слово (2 слова, 4байта, 32 бит) и самый большой RAX размерности Учетверённое слово (4 слова, 8 байт, 64 бит)

строение регистров
строение регистров

Типы Регистров

В этой, как и в последующих статьях мы будем говорить в основном об архитектуре x86-32. Совсем изредка затрагивая тему x86-64. Поэтому и регистры будем рассматривать 32-разрядные.

Всего на данной архитектуре имеется 32 регистра: 16 пользовательских 16 системных. Пользовательские регистры - используются при написании программ:

  • Регистры данных (4 шт.) (являются регистрами общего назначения)
  • Регистры указатели (4 шт.) (являются регистрами общего назначения)
  • Сегментные регистры (6 шт.)
  • Регистр флагов
  • Регистр указатель команды

Регистры Данных

Сегодня мы разберем только один вид регистров — это регистры данных. Остальные будут в следующих статьях. У них есть несколько особенностей. Во-первых, у них есть младший и старший байт (те самые AL и AH). Во-вторых, несмотря на то что у них есть определенное предназначение программист может записывать в них любые данные.

Схематичное изображение регистров данных
Схематичное изображение регистров данных
  1. Аккумулятор (EAX, AX, AH, AL) - этот регистр нужен для хранения временных данных, чаще всего в нем хранится результат арифметических операций
  2. Базовый регистр (EBX, BX, BH, BL) - предназначен для хранения базового адреса объекта. Так как в ассемблере мы напрямую обращаемся к ячейкам памяти, то легче представить, что в нем хранится переменная обозначающая адрес.
  3. Счетчик (ECX, CX, CH, CL) - при написании циклов в него передают количество итераций (повторений)
  4. Регистр данных (EDX, DX, DH, DL) - при использовании команд ввода-вывода в нем хранится адрес порта, например принтера или клавиатуры.

В следующий раз мы разберем регистр флагов и регистры указатели.