Что это такое и зачем нужны?
Это самая быстрая память в ПК по сравнению с ОЗУ. Но при этом размер регистров намного меньше чем ОЗУ, по этой причине используют ОЗУ.
Регистры бывают разных типов: AH, AL, AX, EAX, RAX — это все 1 регистр.
Но в чем их разница? — разница в размере:
-
RAX — 64 битный (8 байт)
-
EAX — 32 битный (4 байта)
-
AX — 16 битный (2 байта)
-
AH, Al — 8 байтные (1 байт)
Регистр RAX это дополнение EAX, EAX это дополнение AX, AX это объединение 2 регистров AH и AL.
Например: если запишем 10 в регистр EAX, то в RAX, AX и AL будет 10. Но почему в AH не было нечего записано? — В AX регистре, AH это старший байт, а AL это младший байт. Но так как 10 (0xA) это число которое не превышает 1 байт то хранится в AL, а в AH будет 0.
Или вот еще пример: если записать число 256 (0x100) в регистр AX, то в AH будет 1, 0 в AL, а в AX и EAX будет 256, почему? — причина в том что легче понимать и работать с ПК через шестнадцатеричную систему счисления, и число 256 будет выглядеть в HEX формате как то так: 0100, и мы видим: 01 это первый байт (он попадает в AH), и 00 это второй байт (он попадет в AL)
Зачем так много разновидностей 1 регистра?
Для поддержке более старых версий процессоров x86 (обратная совместимость, например: на 64 битном ЦП запустить 32 битную программу)
Какие бывают регистры?
Их очень много и каждый под свои задачи, но есть регистры общего доступа, с которыми мы будем работать.
Почему только общедоступные? — с другими регистрами вам вряд ли даст ОС работать.
Это 32 битные регистры (16, 8):
-
EAX (AX, AH, AL)
-
EBX (BX, BH, BL)
-
ECX (CX, CH, CL)
-
EDX (DX, DH, DL)
-
ESI (SI, это 16 битный регистр, меньше нет)
-
EDI (DI, это 16 битный регистр, меньше нет)
-
EFLAGS (FLAGS)
Как работать с регистрами?
В них можно хранить любую информацию: числа со знаком (int), числа без знака (unsigned int), числа с плавающей запятой (float, в x64 можно хранить double в регистре), адрес, символы (не превышая размер регистра), и другую информацию.
Попробуем записать значение в регистры:
mov eax, 10 mov bl, 0Ah mov cx, 256 mov edx, -200 mov si, 'hi' mov edi, 'haoo'
Что за регистр FLAGS?
Это регистр состояния ЦП, он нужен для проверки и сравнению чисел, проверки регистров.
Например:
cmp eax, 10 ; сравниваем регистр eax и число 10 je next ; перейти на метку next если eax = 10 jl back ; перейти на метку back если eax < 10 lg forw ; перейти на метку forw если eax > 10 jge noforw ; перейти на метку noforw если eax >= 10 jng noback ; перейти на метку noback если eax НЕ > 10, аналог jl (<)
test eax, eax ; проверяем регистр eax jz zero ; если регистр eax пуст то перейти на метку zero
ссылка на оригинал статьи https://habr.com/ru/articles/581286/
Добавить комментарий