assembler. Учебник для вузов_Юров В.И_2003 -637с (862834), страница 10
Текст из файла (страница 10)
Перечислимсистемные регистры, поддерживаемые IA-32:D управляющие регистры CRO.. .CR4 определяют режим работы процессора и характеристики текущей исполняемой задачи;D регистры управления памятью GDTR, IDTR, LDTR и TR используются в защищенном режиме работы процессора для локализации управляющих структур этого режима;П отладочные регистры DRO.. .DR7 предназначены для мониторинга и управления различными аспектами отладки;D регистры типов областей памяти MTRR используются для аппаратного управления кэшированием в целях назначения соответствующих свойств областям памяти;П машинно-зависимые регистры MSR используются для управления процессором, контроля за его производительностью, получения информации обошибках.Почему в обозначениях многих из регистров общего назначения присутствуетнаклонная разделительная черта? Это не разные регистры — это части одного большого 32-разрядного регистра, но их можно использовать в программе как отдельные объекты.
Зачем так сделано? Чтобы обеспечить работоспособность программ,написанных для прежних 16-разрядных моделей процессоров фирмы Intel начиная с i8086. Процессоры i486 и Pentium имеют в основном 32-разрядные регистры.44Глава 2. Программно-аппаратная архитектура IA-32 процессоров IntelИх количество, за исключением сегментных регистров, такое же, как и у 18086,но размерность больше, что и отражено в обозначениях — они имеют приставку е(extended).Многие из приведенных регистров предназначены для работы с определенными вычислительными подсистемами процессора: сопроцессором, MMX-расширениями.
Поэтому их целесообразно рассматривать в соответствующем контексте.Так как первая часть учебника посвящена вопросам программирования целочисленной подсистемы процессора, то в данной главее описываются регистры, обеспечивающие ее функционирование. В дальнейшем при обсуждении новых вычислительных подсистем процессора будут рассмотрены и другие регистры из перечисленных ранее.Регистры общего назначенияРегистры общего назначения используются в программах для хранения:ш операндов логических и арифметических операций;«i компонентов адреса;il указателей на ячейки памяти.В принципе, все эти регистры доступны для хранения операндов без особыхограничений, хотя в определенных условиях некоторые из них имеют жесткоефункциональное назначение, закрепленное на уровне логики работы машинныхкоманд.
Среди всех этих регистров особо следует выделить регистр ESP. Его не следует использовать явно для хранения каких-либо операндов программы, так какв нем хранится указатель на вершину стека программы.Все регистры этой группы позволяют обращаться к своим «младшим» частям(см.
рис. 2.5). Обращение производится по их именам. Важно отметить, что использовать для самостоятельной адресации можно только младшие 16- и 8-разрядныечасти этих регистров. Старшие 16 битов как самостоятельные объекты недоступны.Это сделано, как мы отметили ранее, для совместимости с первыми 16-разрядными моделями процессоров фирмы Intel.
Перечислим регистры, относящиеся к группе регистров общего назначения и физически находящиеся в процессоре внутриарифметико-логического устройства (поэтому их еще называют регистрами АЛУ):к регистр-аккумулятор (Accumulator register) EAX/AX/AH/AL применяется дляхранения промежуточных данных, в некоторых командах его использованиеобязательно;т базовый регистр (Base register) EBX/BX/BH/BL применяется для хранения базового адреса некоторого объекта в памяти;II регистр-счетчик (Count register) ECX/CX/CH/CL применяется в командах, производящих некоторые повторяющиеся действия.
Использование регистра-счетчика зачастую скрыто в алгоритме работы той или иной команды. Например,команда организации цикла LOOP помимо передачи управления анализируети уменьшает на единицу значение регистра ЕСХ/СХ;т регистр данных (Data register) EDX/DX/DH/DL, так же как и регистр ЕАХ/АХ/АН/AL, хранит промежуточные данные (в некоторых командах его явное использование обязательно, в других он используется неявно).Архитектура 1А-3245Следующие два регистра предназначены для поддержки так называемых цепочечных операций, то есть операций, производящих последовательную обработкуцепочек элементов, каждый из которых может иметь длину 32, 16 или 8 бит:И регистр индекса источника (Source Index register) ESI/SI в цепочечных операциях содержит текущий адрес элемента в цепочке-источнике;il регистр индекса приемника (Destination Index register) EDI/DI в цепочечныхоперациях содержит текущий адрес в цепочке-приемнике.В архитектуре процессора на программно-аппаратном уровне поддерживаетсятакая структура данных, как стек.
Для работы со стеком в системе команд процессора есть специальные команды, а в программной модели процессора для этогосуществуют специальные регистры:;»; регистр указателя стека (Stack Pointer register) ESP/SP содержит указатель навершину стека в текущем сегменте стека;II регистр указателя базы кадра стека (Base Pointer register) EBP/BP предназначен для организации произвольного доступа к данным внутри стека.Не стоит пугаться столь жесткого функционального назначения регистров АЛ У.На самом деле при программировании хранить операнды команд можно в большинстве регистров, причем практически в любых сочетаниях.
Однако всегда следует помнить, что некоторые команды требуют строго определенных регистров.Цель подобного жесткого закрепления регистров для этих команд — более компактная кодировка их машинного представления. Знание особенностей использования регистров машинными командами (см. приложение) позволяет, принеобходимости, экономить память, занимаемую кодом программы, и более эффективно программировать алгоритм.Сегментные регистрыПроцессоры Intel аппаратно поддерживают сегментную организацию программы.Это означает, что любая программа состоит из трех сегментов: кода, данных и стека.
Логически машинные команды в архитектуре IA-32 построены так, что привыборке каждой команды для доступа к данным программы или к стеку неявноиспользуется информация из вполне определенных сегментных регистров. В зависимости от режима работы процессора по их содержимому определяются адреса памяти, с которых начинаются соответствующие сегменты. В программной модели IA-32 имеется шесть сегментных регистров CS, SS, DS, ES, GS, FS, служащих длядоступа к четырем типам сегментов.ii Сегмент кода содержит команды программы. Для доступа к этому сегменту служит регистр сегмента кода (Code Segment register) CS. Он содержит адрес сегмента с машинными командами, к которому имеет доступ процессор (эти команды загружаются в конвейер процессора).ii Сегмент данных содержит обрабатываемые программой данные.
Для доступак этому сегменту служит регистр сегмента данных (Data Segment register) DS,который хранит адрес сегмента данных текущей программы.ш Сегмент стека представляет собой область памяти, называемую стеком. Работу со стеком процессор организует по следующему принципу: последний запи-46Глава 2. Программно-аппаратная архитектура IA-32 процессоров Intelсанный в эту область элемент выбирается первым. Для доступа к этой областислужит регистр сегмента стека (Stack Segment register) SS, содержащий адрессегмента стека.№ Дополнительный сегмент данных. Неявно алгоритмы выполнения большинствамашинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в регистре сегмента данных DS.Если программе недостаточно одного сегмента данных, то она имеет возможность задействовать еще три дополнительных сегмента данных.
Но в отличиеот основного сегмента данных, адрес которого содержится в регистре DS, прииспользовании дополнительных сегментов данных их адреса требуется указывать явно с помощью специальных префиксов переопределения сегментов в команде. Адреса дополнительных сегментов данных должны содержаться в регистрах дополнительного сегмента данных (Extension Data Segment registers) ES,GS, FS.Регистры состояния и управленияВ процессор включены два регистра (см.
рис. 2.5), постоянно содержащие информацию о состоянии как самого процессора, так и программы, команды которой онв данный момент обрабатывает:iiрегистр-указатель команд EIP/IP;it регистр флагов Е FLAGS/FLAGS.С помощью этих регистров можно также ограниченным образом управлять состоянием процессора.Регистр-указатель команд (Instruction Pointer register) EIP/IP имеет разрядность32(16) бита и содержит смещение следующей подлежащей выполнению командыотносительно содержимого регистра сегмента кода CS в текущем сегменте команд.Этот регистр непосредственно недоступен программисту, но загрузка и изменениеего значения производятся различными командами управления, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата изпроцедур.