Различия между регистрами EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP и регистрами RAX, RBX, RCX, RDI, RDX

Архитектура процессоров Intel претерпела значительные изменения с появлением 64-битных процессоров. В результате были введены новые 64-битные регистры, которые расширили возможности существующих 32-битных регистров. Рассмотрим основные различия между 32-битными регистрами (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP) и их 64-битными аналогами (RAX, RBX, RCX, RDI, RDX).

Основные отличия

  1. Размер регистров:

    • 32-битные регистры: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.
      • Эти регистры могут хранить значения до 2^32-1 (4,294,967,295), что соответствует 4 байтам или 32 битам.
    • 64-битные регистры: RAX, RBX, RCX, RDI, RDX, RSI, RBP, RSP.
      • Эти регистры могут хранить значения до 2^64-1 (18,446,744,073,709,551,615), что соответствует 8 байтам или 64 битам.
  2. Назначение и использование:

    • 32-битные регистры: Используются в 32-битных операционных системах и приложениях.
    • 64-битные регистры: Используются в 64-битных операционных системах и приложениях. Они расширяют возможности 32-битных регистров, позволяя работать с большими объемами данных и улучшать производительность.
  3. Совместимость:

    • 32-битные регистры: Совместимы с кодом, написанным для 32-битных процессоров.
    • 64-битные регистры: Совместимы с 64-битными приложениями и системами, но также могут использоваться для работы с 32-битным кодом. При этом старшие 32 бита регистра обнуляются, если используется команда, работающая с 32-битным значением.
  4. Доступ к частям регистров:

    • 32-битные регистры: Доступ к частям регистра осуществляется через их 16-битные и 8-битные подрегистры (например, AX, AH, AL для EAX).
    • 64-битные регистры: Поддерживают доступ к нижним 32 битам через 32-битные регистры (например, EAX для RAX), к 16-битным подрегистрам (например, AX), и к 8-битным подрегистрам (например, AL, AH). Также, 64-битные регистры поддерживают дополнительные подрегистры, такие как R8-R15 и их 32-битные, 16-битные и 8-битные части (например, R8D, R8W, R8B).

Примеры различий

Арифметические операции

  • 32-битный код:

    mov eax, 10      ; загрузить значение 10 в EAX
    add eax, 5       ; добавить 5 к EAX
  • 64-битный код:

    mov rax, 10      ; загрузить значение 10 в RAX
    add rax, 5       ; добавить 5 к RAX

Вызовы функций

  • 32-битное соглашение о вызовах (cdecl):

    mov eax, 1
    mov ebx, 2
    call some_function
  • 64-битное соглашение о вызовах (System V AMD64 ABI):

    mov rdi, 1
    mov rsi, 2
    call some_function

Заключение

Основное различие между регистрами EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP и их 64-битными аналогами RAX, RBX, RCX, RDI, RDX, RSI, RBP, RSP заключается в их размере и применении. 64-битные регистры предоставляют большую емкость для данных и расширенные возможности для работы с современными 64-битными системами и приложениями, что способствует повышению производительности и эффективности кода.