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

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

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

Комментарии (11)


  1. kAIST
    03.10.2021 20:15
    +8

    Странная статья. В качестве вводной статьи для новичков не понятная, а для тех кто уже что то понимает, бесполезная.


  1. DistortNeo
    03.10.2021 20:41
    +1

    Почему только общедоступные? — с другими регистрами вам вряд ли даст ОС работать. Это 32 битные регистры (16, 8):

    Правильно ли я понимаю, что с 64-битными регистрами ОС работать не даст?


    1. illya334 Автор
      03.10.2021 20:44

      Общедоступные регистры это 64, 32, 16, 8 разрядные регистры. ОС не даст вам доступ к 64 битным регистрам, если вы в 32 битном режиме.


      1. DistortNeo
        03.10.2021 21:06
        +4

        Я-то в курсе, просто в статье написано насколько много дичи, что если новичок её случайно прочитает, то это пойдёт ему во вред.


  1. CrashLogger
    03.10.2021 20:55
    +4

    Пересказ учебника по ассемблеру ? Но зачем ?


  1. unsignedchar
    03.10.2021 21:17
    +3

    Пересказ - допустим. Но в этом пересказе слабое вступление (непонятно, почему автор начал раскрывать тему регистров. Что они с ним сделали? За что с ними так?). И никаких выводов в конце.

    ЗЫ: ответ хорошиста на экзамене это напоминает ;). Вступление в билете написано, выводы озвучивает препод :)


  1. amarao
    03.10.2021 23:28
    +2

    32 бита x86? Осенью 2021? Почему бы не сфокусироваться тогда на основах - ассемблере 4004?


  1. tattaki
    04.10.2021 01:23
    +2

    Да ладно Вам господа , залез в кладовку и с удовольствием полистал Книгу В.Юрова "ассемблер"(давно уже не наводил порядок -пыли мама дорогая))


  1. azatfr
    04.10.2021 15:39
    +1

    Тема сисек регистров раскрыта не полностью! Не раскрыто как работают регистры CS, DS, ES, FS, GS, SS, EIP, ESP, EBP, ESI, EDI в 64 битном режиме.


  1. 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.


  1. xamdeath
    05.10.2021 19:57

    jng noback ; перейти на метку noback если eax НЕ > 10, аналог jl (<)

    Скорее это если еах<=10

    test eax, eax ; проверяем регистр eax

    jz zero ; если регистр eax пуст то перейти на метку zero

    Точнее если регистр еах=0