Да, это правда компьютер разговаривает сам с собой. Причем так же, как и мы словами, но об этом ближе к концу статьи. Сегодняшняя наша статья будет посвящена регистрам. Разберемся как они устроены, для чего нужны, и каких типов бывают.
Как устроен регистр
Легче всего представить регистр как одноэтажное здание с пронумерованными окнами, расположенными друг за другом, причем нумерация начинается с цифры «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). Во-вторых, несмотря на то что у них есть определенное предназначение программист может записывать в них любые данные.
- Аккумулятор (EAX, AX, AH, AL) - этот регистр нужен для хранения временных данных, чаще всего в нем хранится результат арифметических операций
- Базовый регистр (EBX, BX, BH, BL) - предназначен для хранения базового адреса объекта. Так как в ассемблере мы напрямую обращаемся к ячейкам памяти, то легче представить, что в нем хранится переменная обозначающая адрес.
- Счетчик (ECX, CX, CH, CL) - при написании циклов в него передают количество итераций (повторений)
- Регистр данных (EDX, DX, DH, DL) - при использовании команд ввода-вывода в нем хранится адрес порта, например принтера или клавиатуры.
В следующий раз мы разберем регистр флагов и регистры указатели.