Какие утверждения справедливы относительно регистров общего назначения

от admin

Регистры общего назначения

Они называются ЕАХ, ЕВХ, ЕСХ и EDX (Аккумулятор, База, Счетчик и Данные). Кроме названий, они больше ничем другим не отличаются друг от друга (рис.5.2), поэтому рассмотрим только первый регистр – ЕАХ. Регистр ЕАХ может быть разделен на две части – 16-разрядный регистр АХ (который также присутствует в 80286) и верхние 16 битов, которые никак не называются.

В свою очередь, регистр АХ может быть разделен (не только в 80386, но и в 80286) на два 8-битных регистра – АН и AL. Таким образом обеспечивается совместимость 32-разрядных процессоров с системами команд 16- и 8-разрядных процессоров семейства х86. Если мы заносим в регистр ЕАХ значение 0x12345678, то регистр АХ будет содержать значение 0x5678 (0x56 в АН и 0x78 в AL), а значение 0x1234 будет помещено в верхнюю часть регистра ЕАХ.

«Младшие» регистры других регистров общего назначения называются по такому же принципу (рис.5.2): ЕВХ содержит ВХ, который, в свою очередь, содержит ВН и BL и т.д.

Индексные регистры

К регистрам общего назначения иногда относят и индексные регистры процессора – ESI, EDI и ЕВР (или SI, DI и ВР для 16-разрядных действий). Обычно эти регистры используются для адресации памяти: обращения к массивам, индексирования и т.д. Отсюда их имена: индекс источника (Source Index), индекс приемника (Destination Index), указатель базы (Base Pointer).

Хранить в них только адреса совсем необязательно: регистры ESI, EDI и ЕВР могут содержать произвольные данные. Эти регистры программно доступны, то есть их содержание может быть изменено программистом. Другие регистры лучше «руками не трогать». Регистры ESI, EDI и ЕВР существуют только в 16-разрядной и 32-разрядной версии.

Рис. 5.2. Регистры общего назначения, индексные и указательные

регистры процессоров семейства х86

Сегментные регистры

Эту группу регистров можно отнести к регистрам состояния. Сегментные регистры (CS, SS, DS, ES, FS и GS) только 16-разрядные. Регистры из этой группы используются при вычислении реального адреса (адреса, который будет передан на шину адреса). Процесс вычисления реального адреса зависит от режима процессора (реальный или защищенный) и будет рассмотрен позже.

Названия этих регистров соответствуют выполняемым функциям:

– CS (Code Segment, сегмент кода) вместе с EIP (IP) определяют адрес памяти, откуда нужно прочитать следующую инструкцию;

– аналогично регистр SS (Stack Segment, сегмент стека) в паре с ESP (SS:SP) указывают на вершину стека.

Сегментные регистры DS, ES, FS и GS (Data, Extra, F и G сегменты) используются для адресации данных в памяти.

Регистры состояния и управления

Регистр ESP (SP) – это указатель памяти, который указывает на вершину стека (х86-совместимые процессоры не имеют аппаратного стека). Организацию и назначение стековой памяти мы рассмотрим позже.

Также программно не может быть изменен регистр EIP (IP, Instruction Pointer) – указатель команд. Этот регистр указывает на инструкцию, которая будет выполнена следующей. Значение этого регистра изменяется непосредственно контроллером процессора согласно инструкциям, полученным из памяти.

Нам осталось рассмотреть только регистр флагов (иногда его называют регистром признаков) – EFLAGS. Он состоит из одноразрядных флагов, отображающих в основном текущее состояние арифметико-логического устройства. Рассмотрим только самые важные из них:

• признак нуля ZF (Zero Flag) – 1, если результат предыдущей операции равен нулю;

• признак знака SF (Sign Flag) – 1, если результат предыдущей операции отрицательный.

• признак переполнения OF (Overflow Flag) – 1, если при выполнении предыдущей операции произошло переполнение (overflow), то есть результат операции больше, чем зарезервированная для него память;

• признак переноса CF (Carry Flag) – 1, если бит был «перенесен» и стал битом более высокого порядка;

• признак прерывания IF (Interrupt Flag) – 1, если прерывания процессора разрешены;

• признак направления DF (Direction Flag) – используется для обработки строк.

Регистры общего назначения AVR

Регистры общего назначения (РОН) есть в любом процессоре, микропроцессоре и микроконтроллере. Их ещё называют “рабочие регистры”. Эти регистры используются для хранения промежуточных итогов вычислений (также как и внутренняя память).

По сравнению с памятью у РОН есть два основных преимущества:

  • Обращение к регистрам выполняется намного быстрее, чем к памяти.
  • При обращении к регистрам не нужно указывать адрес (как в случае с памятью).

Файл регистров общего назначения

В документации AVR регистры общего назначения объединены в так называемый файл регистров общего назначения — General Purpose Register File (можно, пожалуй, ещё перевести как “Регистровый файл общего назначения”).

Слово файл перевести с английского можно ещё и как “массив”.

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

В микроконтроллерах серии AVR всего 32 регистра общего назначения. Для использования РОН в программе, каждый такой регистр имеет собственное уникальное имя: от R0 до R31.

Схемы ввода-вывода и размещение регистров в памяти

Массив РОН наилучшим образом приспособлен для для набора команд архитектуры AVR Enhanced RISC. Для того, чтобы достичь необходимой производительности и гибкости, следующие схемы ввода-вывода поддерживаются файлом регистров:

  • Один 8-разрядный выходной операнд и один 8-разрядный входной операнд результата.
  • Два 8-разрядных выходных операнда и один 8-разрядный входной операнд результата.
  • Два 8-разрядных выходных операнда и один 16-разрядный входной операнд результата.
  • Один 16-разрядный выходной операнд и один 16-разрядный входной операнд результата.

На рисунке показана структура 32 рабочих регистров общего назначения процессора.

Структура 32 рабочих регистров общего назначения процессора

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

Как показано на рисунке выше, каждый регистр также связан с адресом в памяти данных. Этот адрес отражает размещение регистра непосредственно в первых 32 ячейках пользовательского пространства данных. Хотя эта память физически не находится в SRAM, такая организация памяти обеспечивает большую гибкость доступа к регистрам, потому как указатель регистра X-, Y- и Z- может быть установлен для индексации любого регистра в файле регистров.

Некоторые команды не могут использовать определённые регистры (подробнее об этом в описании набора команд).

Х-регистр, Y-регистр и Z-регистр

Все регистры общего назначения в AVR являются восьми разрядными. Однако шесть последних регистров (R26. R31) имеют некоторые дополнительные функции для их использования в качестве регистров общего назначения. Эти регистры являются 16-битными указателями адреса для косвенной адресации в области памяти данных. Три косвенных адреса регистров Х, Y и Z определены, как показано на рисунке ниже.

X-, Y- и Z-регистры AVR

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

Таким образом, эти регистры могут быть объединены в пары (см. рис. выше) и использоваться для 16-разрядных операций. При этом остаётся возможность чтения каждого регистра пары отдельно.

Регистры микропроцессоров, их виды и назначение

Регистры микропроцессоров 1

Общие сведения.

При составлении программ в первую очередь необходимо

знать, какие из регистров микропроцессора являются программно–доступными регистрами, в которых можно хранить подлежащие обработке данные (операн­ды), адреса и управляющие сигналы (команды). Совокупность программно–до­ступных регистров образуют регистровую модель микропроцессора. Адресация регистровой области процессора и быстрый доступ к ней обеспечивают создание эффективно исполняемых программ.

В регистровой модели современных процессоров обычно выделяют следу­ющие группы регистров:

● регистры, используемые при выполнении прикладных программ. К ним относят:

• основные функциональные регистры (регистры общего назначения; ука­затель команд, или программный счетчик; сегментные регистры; регистр флагов, или слова состояния);

обработки чисел с плавающей точкой (регистры данных, тегов, состояния, управления, регистры–указатели команды и операнда);

обработки пакетов чисел с плавающей точкой (регист­ры пакетов данных и регистр управления–состояния);

системные регистры (регистры управления режимом, регистры системных адресов, регистры отладки);

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

О неоднородности регистров.

Регистровая область памяти микропроцессора (

— регистровый сегмент) представляет собой набор неоднородных по возможности доступа и по выполняемым функциям регистров. Например, в рас­смотренном выше 8–разрядном процессоре:

● регистр команд является неадресуемым регистром и предназначен только для приема первого байта (кода команды) из памяти;

адресуемые регистры В и С могут быть использованы для хранения одного байта данных или 16–разрядного адреса (в паре);

указатель стека, представляющий собой 16–разрядный регистр, использует­ся для доступа к стеку путем явной и неявной (с помощью специальных ко­манд

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

Функциональная неоднородность области

процессора проявляется в специализации регистров. В зависимости от выполняемых функций можно вы­делить три группы регистров:

регистры данных, используемые в операциях АЛУ в качестве источника и приемника операндов;

адресные регистры, или указатели, предназначенные для формирования ад­ресов данных и команд;

специальные регистры, служащие для индикации текущего состояния про­цессора и управления режимами его работы.

Функциональная специализация затрудняет программирование (из–за необхо­димости учета организации регистров), однако позволяет создать быстро испол­няемую программу с меньшим требуемым объемом памяти для ее хранения.

Читать:
Чем приклеить рамку ноутбука к дисплею

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

Среди регистров данных важное место занимает аккуму­лятор А (

), который выполняет функции временного хранения исход­ных операндов и результатов операций арифметическо–логических устройств (АЛУ). Интенсивное использование аккумулятора и связанное с ним большинство команд арифметической и логической обработки операндов способствует сниже­нию загруженности шины данных, упрощению адресации, повышению быстро­действия процессора. В системах команд микропроцессора выделяются опера­ции с аккумулятором. Поэтому ссылка на аккумулятор при адресации, как прави­ло, производится неявно с помощью кода операции. Неявная адресация позволя­ет не указывать в командах месторасположение одного из операндов и (или) результата операции, что уменьшает длину их кода. В составе микропроцессора может быть не один, а два аккумулятора (например, в МС6809). К регистрам данных относятся явно адресуемые рабочие регистры

1, …., используемые как сверхскоростные регистровые ОЗУ.

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

В процессорах, предназначенных для работы в реальном времени, могут быть предусмотрены не один, а два или даже четыре (например, в некоторых микро­контроллерах) набора рабочих регистров. Один из регистров резервируется для системных целей или обработки прерываний, а остальные — для прикладных задач пользователя. В каждый момент времени доступен только один набор ра­бочих регистров, выбираемый специальным указателем.

К регистрам данных также относятся рассматриваемые ниже регистры общего назначения, которые совмещают функции хранения данных и адресов.

Среди регистров, на которые возложена функция адре­сации, следует выделить:

), или указатель инструкций–команд (

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

увеличивается на 1 или 2 для указания следующего байта или слова. Увеличение содержимого счетчика происходит автоматически сразу после начала выполнения команды. Изменение после­довательной выборки команд из ячеек памяти осуществляется путем загруз­ки программного счетчика адресом требуемой ячейки. Такая ситуация возни­кает, например:

• при выполнении команд условных и безусловных переходов;

• при инициализации микропроцессора путем сброса;

• при обслуживании запросов на прерывание;

используемый для обращений к систем­ному стеку. Стек представляет собой область памяти, предназначенную для хранения адресов возврата и состояний процессора (содержимого регист­ров) при вызове подпрограмм и обслуживании прерываний. Доступ к стеку организован по принципу «последним пришел — первым ушел» (

т. е. в него можно только последовательно добавлять (втал­кивать) или извлекать (выталкивать) элементы данных. Типовой стек, приме­няемый в большинстве процессоров, заполняется в сторону уменьшения ад­ресов.

всегда показывает на последнюю заполненную ячейку, называемую вершиной стека (

Поэтому при операции за­писи (

) в стек элемента данных сначала содержимое указателя

уменьшается на 1 или 2 в зависимости от длины элемента (байт, два байта), формируя адрес ячейки, в которую затем помещается элемент. При операции считывания (

) сначала элемент данных извлекается из стека, после чего содержимое указателя

увеличивается на 1 или 2.

Принцип взаимодействия указателя

рис. 2.4.1

со стеком проиллюстрирован на примере записи в стек и считывания из него четырех однобайтных элементов (рис. 2.4.1, а).

При операциях со стеком значение указателя

непрерывно меняется, поэтому применять его в качестве точки отсчета при доступе к хранящимся в стеке данным вызывает определенные трудности. Поэтому в ряде случаев, например, при хранении в стеке локальных переменных или при обмене па­раметрами между вызываемой и вызывающей процедурой (подпрограммой), используется указатель кадра (

) — специально зарезерви­рованный адресный регистр. Регистр

, указывающий на начало области па­раметров в стеке (рис. 2.4.1, б), принадлежит к классу базовых регистров. В 16–разрядных процессорах указателем кадра служит индексный регистр ВХ;

регистры, предназначенные для хранения адресов обращения к основной па­мяти. Такие регистры, называемые указательными или индексными, позволя­ют сократить размер кода (программы). К ним следует отнести:

• регистры косвенного адреса (

), содержащие непосред­ственно адрес операнда;

), хранящие начальные (базовые) адреса массивов и записей;

индексные регистры I или X (

), содержимое которых является относи­тельным (смещенным) адресом операнда;

• регистры автоинкрементной и автодекрементной адресации, автоматиче­ски увеличивающие или уменьшающие свое содержимое после выполне­ния операции;

• регистры расширения адресного пространства (до 1М байт).

К специальным регистрам следует отнести регистр флагов (

), или регистр слова состояния программы (

а также ряд регистров, используемых в сопроцессорах и микроконтроллерах.

На регистр флагов возлагается функция хранения признаков. С каждым при­знаком связывается одноразрядная переменная (бит), называемая флагом (флажком). Регистр флагов содержит:

биты признаков состояния процессора. Обычно эти признаки формируются в АЛУ после выполнения операции и характеризуют ее результат;

● биты управления и системных признаков, которые устанавливаются операци­онной системой (некоторые пользователем) и задают режим процессора при организации ввода–вывода данных, обслуживании прерываний и исключений, решении последовательности вызываемых задач и реализации ряда других процедур.

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

Ниже приведены обозначение, название и назначение флагов признаков состояния, а также показан принцип формирования некоторых флагов из отдельных бит

–разрядных операндов вида

, которые могут быть как исходным операндом, так и результатом выполненной операции:

3. Регистры процессора 8086

Статья основана на материале xrnd с сайта asmworld (из учебного курса по программированию на ассемблер 16-битного процессора 8086 под DOS).

Для того, чтобы писать программы на ассемблере, нам необходимо знать, какие регистры процессора существуют и как их можно использовать. Все процессоры архитектуры x86 (даже многоядерные, большие и сложные) являются дальними потомками древнего Intel 8086 и совместимы с его архитектурой. Это значит, что программы на ассемблере 8086 будут работать и на всех современных процессорах x86.

Все внутренние регистры процессора Intel 8086 являются 16-битными:

Всего процессор содержит 12 программно-доступных регистров, а также регистр флагов ( FLAGS ) и указатель команд ( IP ).

Регистры общего назначения (РОН) AX, BX, CX и DX используются для хранения данных и выполнения различных арифметических и логических операций. Кроме того, каждый из этих регистров поделён на 2 части по 8-бит, с которыми можно работать как с 8-битными регистрами (AH, AL, BH, BL, CH, CL, DH, DL). Младшие части регистров имеют в названии букву L (от слова Low), а старшие H (от слова High). Некоторые команды неявно используют определённый регистр, например, CX может выполнять роль счетчика цикла.

Индексные регистры предназначены для хранения индексов при работе с массивами. SI (Source Index) содержит индекс источника, а DI (Destination Index) — индекс приёмника, хотя их можно использовать и как регистры общего назначения.

Регистры-указатели BP и SP используются для работы со стеком. BP (Base Pointer) позволяет работать с переменными в стеке. Его также можно использовать в других целях. SP (Stack Pointer) указывает на вершину стека. Он используется командами, которые работают со стеком. (Про стек я подробно расскажу в отдельной части учебного курса)

Сегментные регистры CS (Code Segment), DS (Data Segment), SS (Stack Segment) и ES (Enhanced Segment) предназначены для обеспечения сегментной адресации. Код находится в сегменте кода, данные — в сегменте данных, стек — в сегменте стека и есть еще дополнительный сегмент данных. Реальный физический адрес получется путём сдвига содержимого сегментного регистра на 4 бита влево и прибавления к нему смещения (относительного адреса внутри сегмента). Подробнее о сегментной адресации рассказывается в части 31.

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

Указатель команд IP (Instruction Pointer) содержит адрес команды (в сегменте кода). Напрямую изменять его содержимое нельзя, но процессор делает это сам. При выполнении обычных команд значение IP увеличивается на размер выполненной команды. Существуют также команды передачи управления, которые изменяют значение IP для осуществления переходов внутри программы.

Регистр флагов FLAGS содержит отдельные биты: флаги управления и признаки результата. Флаги управления меняют режим работы процессора:

  • D (Direction) — флаг направления. Управляет направлением обработки строк данных: DF=0 — от младших адресов к старшим, DF=1 — от старших адресов к младшим (для специальных строковых команд).
  • I (Interrupt) — флаг прерывания. Если значение этого бита равно 1, то прерывания разрешены, иначе — запрещены.
  • T (Trap) — флаг трассировки. Используется отладчиком для выполнения программы по шагам.

Признаки результата устанавливаются после выполнения арифметических и логических команд:

  • S (Sign) — знак результата, равен знаковому биту результата операции. Если равен 1, то результат — отрицательный.
  • Z (Zero) — флаг нулевого результата. ZF=1, если результат равен нулю.
  • P (Parity) — признак чётности результата.
  • C (Carry) — флаг переноса. CF=1, если при сложении/вычитании возникает перенос/заём из старшего разряда. При сдвигах хранит значение выдвигаемого бита.
  • A (Auxiliary) — флаг дополнительного переноса. Используется в операциях с упакованными двоично-десятичными числами.
  • O (Overflow) — флаг переполнения. CF=1, если получен результат за пределами допустимого диапазона значений.

Не волнуйтесь, если что-то показалось непонятным. Из дальнейшего объяснения станет ясно, что к чему и как всем этим пользоваться.

Related Posts