Наборы регистров

Регистрами называются области высокоскоростной памяти, расположенные внутри процессора в непосредственной близости от его исполнительного ядра. Доступ к ним осуществляется несравнимо быстрее, чем к ячейкам оперативной памяти. Соответственно, машинные команды с операндами в регистрах выполняются максимально быстро, поэтому в программах на языке ассемблера регистры используются очень интенсивно. К сожалению, архитектура IA-32 предоставляет в распоряжение программиста не слишком много регистров, поэтому они являются критически важным ресурсом и за их содержимым приходится следить очень внимательно.

Большинство регистров имеют определенное функциональное назначение. С точки зрения программиста их можно разделить на две большие группы.

Первую группу образуют пользовательские регистры, к которым относятся:

· Регистры общего назначения (РОН) - EAX/AX/AH/AL, EBX/BX/BH/BL, EDX/DX/DH/DL, ЕСХ/CX/CH/CL, ЕВР/ВР, ESI/SI, EDI/DI, ESP/SP предназначены для хранения данных и адресов, программист может их использовать (с определенными ограничениями) для реализации своих алгоритмов.

· Cегментные регистры - CS, DS, SS, ES, FS, GS используются для хранения адресов сегментов в памяти.

· Регистры сопроцессора - ST(0), ST(1), ST(2), ST(3), ST(4), ST(5), ST(6), ST(7) предназначены для написания программ, использующих тип данных с плавающей точкой.

· Целочисленные регистры MMX-расширения - ММХО, MMXl, MMX2, ММХЗ, ММХ4, ММХ5, ММХб, ММХ7;

· Регистры XMM-расширения с плавающей точкой - XMMO, XMM1, ХММ2, ХММЗ, ХММ4,ХММ5,ХММб,ХММ7;

· Регистры состояния и управления (регистр флагов Е FLAGS/FLAGS и регистр указатель команды EIP/IP) содержат информацию о состоянии процессора исполняемой программы и позволяют изменить это состояние.

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

· Управляющие регистры – CR0.. .CR4. Они определяют режим работы процессора и характеристики текущей исполняемой задачи.

· Регистры управления памятью - GDTR, IDTR, LDTR и TR используются в защищенном режиме работы процессора для локализации управляющих структур этого режима.

· Отладочные регистры DR0.. .DR7 предназначены для мониторинга и управления различными аспектами отладки;

· Регистры типов областей памяти MTRR используются для аппаратного управления кэшированием в целях назначения соответствующих свойств областям памяти.

· Машинно-зависимые регистры MSR используются для управления процессором, контроля за его производительностью, получения информации обошибках.

Почему в обозначениях многих из регистров общего назначения присутствует наклонная разделительная черта? Это не разные регистры — это части одного большого 32-разрядного регистра, но их можно использовать в программе как отдельные объекты. Зачем так сделано? Чтобы обеспечить работоспособность программ, написанных для прежних 16-разрядных моделей процессоров фирмы Intel начиная с i8086.

Многие из приведенных регистров предназначены для работы с определенны ми вычислительными подсистемами процессора: сопроцессором, MMX-расширениями. Поэтому их целесообразно рассматривать в соответствующем контексте.

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