Как стать автором
Обновить

Уроки FASM. Регистры. Window x32

Время на прочтение2 мин
Количество просмотров11K

Что это такое и зачем нужны?

Это самая быстрая память в ПК по сравнению с ОЗУ. Но при этом размер регистров намного меньше чем ОЗУ, по этой причине используют ОЗУ.

Регистры бывают разных типов: 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.

wikipedia
wikipedia

Например: если запишем 10 в регистр EAX, то в RAX, AX и AL будет 10. Но почему в AH не было нечего записано? - В AX регистре, AH это старший байт, а AL это младший байт. Но так как 10 (0xA) это число которое не превышает 1 байт то хранится в AL, а в AH будет 0.

OllyDbg
OllyDbg

Или вот еще пример: если записать число 256 (0x100) в регистр AX, то в AH будет 1, 0 в AL, а в AX и EAX будет 256, почему? - причина в том что легче понимать и работать с ПК через шестнадцатеричную систему счисления, и число 256 будет выглядеть в HEX формате как то так: 0100, и мы видим: 01 это первый байт (он попадает в AH), и 00 это второй байт (он попадет в AL)

Ollydbg
Ollydbg

Зачем так много разновидностей 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
Теги:
Хабы:
-15
Комментарии11

Публикации

Изменить настройки темы

Истории

Ближайшие события