Сведения об окне регистров в Visual Studio (C#, C++, Visual Basic, F#)

Окно Регистры доступно, только если включена отладка на уровне адреса в диалоговом окне Параметры в разделе Отладка.

Регистры представляют собой специальные области, расположенные внутри ЦП, которые используются для хранения небольших частей данных, с которыми процессор активно работает. При компиляции или интерпретации исходного кода создаются инструкции, перемещающие при необходимости данные из памяти в регистры и обратно. Доступ к данным, хранящимся в регистрах, осуществляется значительно быстрее по сравнению с доступом к данным, хранящимся в памяти. Таким образом, код, позволяющий процессору хранить данные в регистрах и осуществлять к ним многократный доступ, имеет тенденцию к более быстрому выполнению, чем код, требующий, чтобы процессор постоянно загружал и выгружал данные из регистра. Чтобы компилятору было проще хранить данные в регистрах и выполнять другие виды оптимизации, необходимо избегать использования глобальных переменных и, насколько это возможно, полагаться на локальные переменные. Считается, что код, написанный таким образом, имеет хорошее расположение ссылок. В некоторых языках программирования, например C/C++, программист может объявлять переменные регистра, предписывающие компилятору по возможности все время хранить переменную в регистре. Дополнительные сведения см. в статье о ключевом слове register.

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

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

Процессор, как правило, имеет два набора регистров общего назначения. Один из них оптимизирован для выполнения операций с плавающей запятой, а другой — для выполнения операций с целыми числами. Первые называются регистрами с плавающей запятой, вторые — целыми регистрами.

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

Дополнительные сведения об окне Регистры см. в этой статье.

Если взглянуть на окно Регистры, вы увидите записи, такие как EAX = 003110D8.

Символ слева от знака = является именем регистра — EAX, в данном случае. Число, расположенное справа от знака равенства (=), — содержимое регистра.

Окно Регистры позволяет не только просматривать содержимое регистра. В режиме приостановки в присущем данному объекту коде можно щелкнуть мышью содержимое регистра и изменить значение. Эти действия нельзя выполнять случайным образом. Если неясен смысл данных изменяемого регистра, в результате неаккуратного изменения может произойти аварийное завершение программы или иные нежелательные последствия. К сожалению, подробное описание регистров, используемых в различных процессорах Intel и процессорах, совместимых с Intel, лежит далеко за пределами этого краткого введения.

Группы регистров

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

Флаги регистров

Для процессоров Intel x86 могут отображаться следующие флаги в окне Регистры. Во время сеанса отладки можно также изменить эти флаги.

Флаг Задание значения
Overflow OV = 1
Направление UP = 1
Прервать EI = 1
Подписание PL = 1
Ноль ZR = 1
Вспомогательный перенос AC = 1
Четность PE = 1
Carry CY = 1