Что это такое и зачем нужны?
Это самая быстрая память в ПК по сравнению с ОЗУ. Но при этом размер регистров намного меньше чем ОЗУ, по этой причине используют ОЗУ.
Регистры бывают разных типов: 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