Что это такое и зачем нужны?
Это самая быстрая память в ПК по сравнению с ОЗУ. Но при этом размер регистров намного меньше чем ОЗУ, по этой причине используют ОЗУ.
Регистры бывают разных типов: 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
Комментарии (11)
DistortNeo
03.10.2021 20:41+1Почему только общедоступные? — с другими регистрами вам вряд ли даст ОС работать. Это 32 битные регистры (16, 8):
Правильно ли я понимаю, что с 64-битными регистрами ОС работать не даст?
illya334 Автор
03.10.2021 20:44Общедоступные регистры это 64, 32, 16, 8 разрядные регистры. ОС не даст вам доступ к 64 битным регистрам, если вы в 32 битном режиме.
DistortNeo
03.10.2021 21:06+4Я-то в курсе, просто в статье написано насколько много дичи, что если новичок её случайно прочитает, то это пойдёт ему во вред.
unsignedchar
03.10.2021 21:17+3Пересказ - допустим. Но в этом пересказе слабое вступление (непонятно, почему автор начал раскрывать тему регистров.
Что они с ним сделали? За что с ними так?).И никаких выводов в конце.ЗЫ: ответ хорошиста на экзамене это напоминает ;). Вступление в билете написано, выводы озвучивает препод :)
amarao
03.10.2021 23:28+232 бита x86? Осенью 2021? Почему бы не сфокусироваться тогда на основах - ассемблере 4004?
tattaki
04.10.2021 01:23+2Да ладно Вам господа , залез в кладовку и с удовольствием полистал Книгу В.Юрова "ассемблер"(давно уже не наводил порядок -пыли мама дорогая))
azatfr
04.10.2021 15:39+1Тема
сисекрегистров раскрыта не полностью! Не раскрыто как работают регистры CS, DS, ES, FS, GS, SS, EIP, ESP, EBP, ESI, EDI в 64 битном режиме.
AndreyDmitriev
05.10.2021 18:18Вообще есть же пара неплохих книжек, и даже переведённые на русский:
Jo Van Hoey / Йо Ван Гуй - Beginning x64 Assembly Programming. From Novice to AVX Professional / Программирование на ассемблере х64. От начального уровня до профессионального использования AVX.
и
Daniel Kusswurm / Даниэль Куссвюрм - Modern X86 Assembly Language Programming. Covers x86 64-bit, AVX, AVX2, and AVX-512 / Профессиональное программирование на ассемблере x64 с расширениями AVX, AVX2 и AVX-512
Обе достаточно современные и прекрасно применимы и к упражнениям с fasm.
xamdeath
05.10.2021 19:57jng noback ; перейти на метку noback если eax НЕ > 10, аналог jl (<)
Скорее это если еах<=10
test eax, eax ; проверяем регистр eax
jz zero ; если регистр eax пуст то перейти на метку zero
Точнее если регистр еах=0
kAIST
Странная статья. В качестве вводной статьи для новичков не понятная, а для тех кто уже что то понимает, бесполезная.