ФЭНДОМ


Регистры общего назначения предназначены для хранения операндов арифметико-логических инструкций, а также адресов или отдельных компонентов адресов ячеек памяти.

В микропроцессоре 8086 было восемь 16-разрядных регистров общего назначения. Все они могли выступать в качестве операндов основных арифметико - логических инструкций, но только четыре годились для целей адресации. Кроме того, каждый регистр имел свои специфические функции:

  • AX — аккумулятор. Использовался для хранения операндов в командах умножения и деления, ввода-вывода, в некоторых командах обработки строк и других операциях;
  • BX — регистр базы. Используется для хранения адреса или части адреса операнда, находящегося в памяти;
  • CX — счётчик. Содержит количество повторений строковых операций, циклов и сдвигов;
  • DX — регистр данных. Используется для косвенной адресации портов ввода-вывода, а также как «расширитель» аккумулятора в операциях удвоенной разрядности;
  • SI — регистр адреса источника. Используется в строковых операциях, а также в качестве индексного регистра при обращении к операндам в памяти;
  • DI — регистр адреса приёмника. Используется в строковых операциях, а также в качестве индексного регистра при обращении к операндам в памяти;
  • BP — указатель кадра стека. Используется для адресации операндов, расположенных в стеке;
  • SP — указатель стека. Используется при выполнении операций со стеком, но не для явной адресации операндов в стеке.

Первые четыре регистра могут делиться на две однобайтовых части каждый: AH, BH, CH и DH для старших байтов и AL, BL, CL и DL для младших байтов.

В микропроцессоре 80386 разрядность регистров была удвоена и составила 32 бита. Обновлённые регистры не заменили, а дополнили уже имеющиеся: 32-разрядные версии получили имена EAX, EBX, ECX, EDX, ESI, EDI, EBP и ESP, а их младшие слова сохранили прежние обозначения, причём у первых четырёх регистров сохранилась возможность раздельного обращения к двум младшим байтам (AH, AL и так далее). С помощью префикса изменения размера операнда возможно выполнение 32-разрядных операций в реальном режиме и режиме виртуального процессора 8086.

Другим важным новшеством процессора 80386 стало уменьшение «дискриминации» между регистрами: теперь компоненты 32-разрядных адресов можно хранить в любом регистре. Появилась также возможность масштабирования — использования содержимого регистра в качестве индекса, при вычислении адреса автоматически умножаемого на 2, 4 или 8. Однако при работе в реальном режиме и режиме виртуального процессора 8086 для адресации по-прежнему используются только BX, BP, SI и DI, отсутствует и возможность масштабирования.

Появление 64-разрядных микропроцессоров (технология EM64T/AMD64) повлекло серьёзные изменения в наборе регистров общего назначения. Суть изменений сводится к следующему:

  • регистров стало 16 вместо восьми, а их разрядность удвоилась и составила 64 бита;
  • новые регистры, а также старшие половины ранее существовавших регистров доступны только в 64-разрядном режиме;
  • по умоланию регистры считаются 32-разрядными (используются младшие половины 64-разрядных регистров) и носят имена EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, R8D–R15D. Для доступа к новым регистрам R8D–R15D в коде команды должен присутствовать специальный префикс, в документации фирмы Intel обозначаемый REX;
  • 64-разрядные регистры носят следующие имена: RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, R8–R15. Для доступа к ним в код команды включается префикс REX;
  • возможен доступ к младшим словам любого из 16 регистров, обозначаемых в этом случае AX, BX, CX, DX, SI, DI, BP, SP, R8W-R15W. Если требуется обратиться к новым регистрам R8W–R15W, в коде команды используется префикс REX;
  • возможен доступ к младшим байтам любого из 16 регистров, для чего используются обозначения AL, BL, CL, DL, SIL, DIL, BPL, SPL, R8L–R15L. Для доступа к новым однобайтовым регистрам — SIL, DIL, BPL, SPL, R8L–R15L — используется префикс REX;
  • доступ к старшим байтам младших слов регистров возможен только для ранее существовавших регистров AH, BH, CH и DH. Чтобы обратиться к ним, префикс REX должен отсутствовать. Таким образом, невозможно одновременно обратиться к одному из указанных четырёх регистров и к любому из новых регистров независимо от разрядности;
  • при работе в 64-разрядном режиме 32-разрядные арифметико-логические операции, чьим приёмником является регистр общего назначения, обнуляют его старшие 32 бита, а 8- и 16-разрядные операции не изменяют старшие разряды, явно не затрагиваемые операцией. Однако если результат 8- или 16-разрядной операции используется для вычисления 64-разрядного адреса, происходит распространение знака результата на старшие разряды до получения полной 64-разрядной величины;
  • при переключении из 64-разрядного режима в режим совместимости или обратно содержимое старших 32 битов регистров RAX, RBX, RCX, RDX, RSI, RDI, RBP и RSP не сохраняется. Содержимое регистров R8–R15 в аналогичной ситуации сохраняется;

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.