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

СОДЕРЖАНИЕ:

ЛЕКЦИЯ № 14. Ассемблер

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

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

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

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

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

Рис. 1. Структурная схема персонального компьютера

2. Программная модель микропроцессора

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

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

Данные регистры можно разделить на две большие группы:

1) 6 пользовательских регистров;

2) 16 системных регистров.

3. Пользовательские регистры

Как следует из названия, пользовательскими регистры называются потому, что программист может использовать их при написании своих программ. К этим регистрам относятся (рис. 2):

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

2) шесть регистров сегментов: cs, ds, ss, es, fs, gs;

3) регистры состояния и управления:

регистр флагов eflags/flags;

регистр указателя команды eip/ip.

Рис. 2. Пользовательские регистры

Многие из этих регистров приведены с наклонной разделительной чертой. Это не разные регистры – это части одного большого 32-разрядного регистра. Их можно использовать в программе как отдельные объекты.

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

Все регистры этой группы позволяют обращаться к своим «младшим» частям. Использовать для самостоятельной адресации можно только младшие 16– и 8-битные части этих регистров. Старшие 16 бит этих регистров как самостоятельные объекты недоступны.

Перечислим регистры, относящиеся к группе регистров общего назначения. Так как эти регистры физически находятся в микропроцессоре внутри арифметико-логического устройства (АЛ>), то их еще называют регистрами АЛУ:

1) eax/ax/ah/al (Accumulator register) – аккумулятор. Применяется для хранения промежуточных данных. В некоторых командах использование этого регистра обязательно;

2) ebx/bx/bh/bl (Base register) – базовый регистр. Применяется для хранения базового адреса некоторого объекта в памяти;

3) ecx/cx/ch/cl (Count register) – регистр-счетчик. Применяется в командах, производящих некоторые повторяющиеся действия. Его использование зачастую неявно и скрыто в алгоритме работы соответствующей команды.

К примеру, команда организации цикла loop, кроме передачи управления команде, находящейся по некоторому адресу, анализирует и уменьшает на единицу значение регистра есх/сх;

4) edx/dx/dh/dl (Data register) – регистр данных.

Так же, как и регистр eax/ax/ah/al, он хранит промежуточные данные. В некоторых командах его использование обязательно; для некоторых команд это происходит неявно.

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

1) esi/si (Source Index register) – индекс источника.

Этот регистр в цепочечных операциях содержит текущий адрес элемента в цепочке-источнике;

2) edi/di (Destination Index register) – индекс приемника (получателя). Этот регистр в цепочечных операциях содержит текущий адрес в цепочке-приемнике.

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

1) esp/sp (Stack Pointer register) – регистр указателя стека. Содержит указатель вершины стека в текущем сегменте стека.

2) ebp/bp (Base Pointer register) – регистр указателя базы кадра стека. Предназначен для организации произвольного доступа к данным внутри стека.

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

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

В программной модели микропроцессора имеется шесть сегментных регистров: cs, ss, ds, es, gs, fs.

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

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

Микропроцессор поддерживает следующие типы сегментов.

1. Сегмент кода. Содержит команды программы. Для доступа к этому сегменту служит регистр cs (code segment register) – сегментный регистр кода. Он содержит адрес сегмента с машинными командами, к которому имеет доступ микропроцессор (т. е. эти команды загружаются в конвейер микропроцессора).

2. Сегмент данных. Содержит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр ds (data segment register) – сегментный регистр данных, который хранит адрес сегмента данных текущей программы.

3. Сегмент стека. Этот сегмент представляет собой область памяти, называемую стеком. Работу со стеком микропроцессор организует по следующему принципу: последний записанный в эту область элемент выбирается первым. Для доступа к этому сегменту служит регистр ss (stack segment register) – сегментный регистр стека, содержащий адрес сегмента стека.

4. Дополнительный сегмент данных. Не явно алгоритмы выполнения большинства машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в сегментном регистре ds. Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще три дополнительных сегмента данных. Но в отличие от основного сегмента данных, адрес которого содержится в сегментном регистре ds, при использовании дополнительных сегментов данных их адреса требуется указывать явно с помощью специальных префиксов переопределения сегментов в команде. Адреса дополнительных сегментов данных должны содержаться в регистрах es, gs,fs (extension data segment registers).

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

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

1) регистр флагов eflags/flags;

2) регистр указателя команды eip/ip.

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

1. eflags/flags (flag register) – регистр флагов. Разрядность eflags/flags – 32/16 бит. Отдельные биты данного регистра имеют определенное функциональное назначение и называются флагами. Младшая часть этого регистра полностью аналогична регистру flags для 18086. На рисунке 3 показано содержимое регистра eflags.

Рис. 3. Содержимое регистра eflags

Исходя из особенностей использования флаги регистра eflags/flags можно разделить на три группы:

1) восемь флагов состояния.

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

2) один флаг управления.

Обозначается df (Directory Flag). Он находится в 10-м бите регистра eflags и используется цепочечными командами. Значение флага df определяет направление поэлементной обработки в этих операциях: от начала строки к концу (df = 0) либо наоборот, от конца строки к ее началу (df = 1). Для работы с флагом df существуют специальные команды: eld (снять флаг df) и std (установить флаг df). Применение этих команд позволяет привести флаг df в соответствие с алгоритмом и обеспечить автоматическое увеличение или уменьшение счетчиков при выполнении операций со строками.

3) пять системных флагов.

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

Таблица 1. Флаги состояния

Таблица 2. Системные флаги

2. eip/ip (Instraction Pointer register) – регистр-указатель команд. Регистр eip/ip имеет разрядность 32/16 бит и содержит смещение следующей подлежащей выполнению команды относительно содержимого сегментного регистра cs в текущем сегменте команд. Этот регистр непосредственно недоступен программисту, но загрузка и изменение его значения производятся различными командами управления, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний также приводит к модификации регистра eip/ip.

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

Что нужно для того, чтобы стать профессиональным разработчиком программ для микроконтроллеров и выйти на такой уровень мастерства, который позволит с лёгкостью найти и устроиться на работу с высокой зарплатой (средняя зарплата программиста микроконтроллеров по России на начало 2020 года составляет 80 000 рублей). Подробнее.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Каждый электрик должен знать:  Искрят все розетки в доме после прокладки новой проводки

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

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

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

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

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

Регистр

Материал из Справочник исследователя программ

Содержание

Регистр

Внутри микросхемы центрального процессора (CPU) имеются ячейки памяти, которые и называются регистрами, они еще могут называться сверх-оперативной памятью (СОЗУ — сверхоперативное запоминающее устройство). Так как регистры находятся прямо внутри процессора, скорость доступа к ним значительно выше, чем к обычно оперативной памяти, однако их объем составляет лишь единицы байт, поэтому процессором регистры используются для выполнения простейших операций, как то арифметические и логические операции, также имеются регистры, в которых хранятся адреса оперативной памяти с которыми оперирует процессор (адрес стека в регистре ESP, адрес текущей выполняемой процессором команды в регистре EIP и так далее)

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

Постоянно происходит технический прогресс и особенно разработка компьютеров не стоит на месте, совсем недавно лучшими были 8 битные процессоры, а последнее время речь идёт уже о 64 битных. Но в данный момент (2011 год) нас больше всего интересуют 32 битные процессоры, которые содержат 32 битные регистры.

Битность процессора напрямую связана с битностью регистров и их аббревиатурой, поэтому:

Существуют следующие типы регистров:

  • Регистры общего назначения (РОН) — EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP
  • Регистр-указатель команд — EIP
  • Регистр флагов — EFL (EFLAGS)
  • Сегментные регистры — SS, CS, DS, ES

Описание регистров

Регистры общего назначения (РОН) служат для хранения промежуточных вычислений.

  • RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8 — R15 — 64-битные
  • EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, R8D — R15D — 32-битные (extended AX)
  • AX, CX, DX, BX, SP, BP, SI, DI, R8W — R15W — 16-битные
  • AH, AL, CH, CL, DH, DL, BH, BL, SPL, BPL, SIL, DIL, R8B — R15B — 8-битные (половинки 16-ти битных регистров)

например, AH — high AX — старшая половинка 8 бит AL — low AX — младшая половинка 8 бит

RAX RCX RDX RBX
EAX ECX EDX EBX
AX CX DX BX
AH AL CH CL DH DL BH BL
RSP RBP RSI RDI Rx
ESP EBP ESI EDI RxD
SP BP SI DI RxW
SPL BPL SIL DIL RxB

где x — 8..15.
Регистры RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, Rx, RxD, RxW, RxB, SPL, BPL, SIL, DIL доступны только в 64-битном режиме работы процессора.

Часто используемые расшифровки

  • EAX — регистр-аккумулятор
  • ECX — регистр-счетчик (при выполнение циклов)
  • ESI — [SI = Source Index] (указывает на адрес-источник при строковых операциях)
  • ESI — [DI = Destination Index] (указывает на адрес-приёмник при строковых операциях)
  • EIP — [IP = Instruction Pointer]

Регистр флагов FLAGS (16 бит) / EFLAGS (32 бита) / RFLAGS (64 бита) — содержит текущее состояние процессора.

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

  • С последовательным приёмом и выдачей информации — сдвиговые регистры.
  • С параллельным приёмом и выдачей информации — параллельные регистры.

Сдвиговые регистры представляют собой последовательно соединённую цепочку триггеров. Основной режим работы — сдвиг разрядов кода от одного триггера к другому на каждый импульс тактового сигнала.

По назначению регистры различаются на:

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

Сегментные регистры — Регистры указывающие на сегменты.

CS (Code Segment), DS (Data Segment), SS (Stack Segment), ES, FS, GS

В реальном режиме работы процессора сегментные регистры содержат адрес начала 64Kb сегмента, смещенный вправо на 4 бита.

В защищенном режиме работы процессора сегментные регистры содержат селектор сегмента памяти, выделенного ОС.

CS — указатель на кодовый сегмент. Связка CS:IP (CS:EIP/CS:RIP — в защищенном/64-битном режиме) указывает на адрес в памяти следующей команды.

Счётчик команд

IP — регистр, содержащий адрес-смещение следующей команды, подлежащей исполнению, относительно кодового сегмента CS в процессорах семейства x86.

Регистр IP связан с CS в виде CS:IP, где CS является текущим кодовым сегментом, а IP — текущим смещением относительно этого сегмента.

Регистр IP является 16-разрядным регистром-указателем. Кроме него, в состав регистров этого типа входят SP (Stack Pointer — указатель стека) и BP (Base Pointer — базовый указатель).

Например, CS содержит значение 2CB5[0]H , в регистре IP хранится смещение 123H .

Адрес следующей инструкции, подлежащей исполнению, вычисляется путем суммирования адреса в CS (сегменте кода) со смещением в регистре IP:

2CB50H + 123H = 2CC73H

Таким образом, адрес следующей инструкции для исполнения равен 2CC73H .

При выполнении текущей инструкции процессор автоматически изменяет значение в регистре IP, в результате чего регистровая пара CS:IP всегда указывает на следующую подлежащую исполнению инструкцию.

Начиная с процессора 80386 была введена 32-разрядная версия регистра-указателя — EIP. В данном случае IP является младшей частью этого регистра (первые 16 разрядов). Принцип работы EIP в целом схож с работой регистра IP. Основная разница состоит в том, что в защищённом режиме, в отличие от реального режима, регистр CS является селектором (селектор указывает не на сам сегмент в памяти, а на его дескриптор сегмента в таблице дескрипторов).

Смерть и возрождение сегментной модели организации памяти

Разрабатывая архитектуру x86-64, инженеры корпорации AMD решили навсегда покончить с главным «рудиментом» архитектуры x86 — сегментной моделью памяти, которая передавалась по наследству ещё со времён 8086. Однако, как потом оказалось, они очень погорячились. Архитектура стала абсолютно невиртуализируемой. При разработке новой версии своего продукта для виртуализации программисты компании VMWare столкнулись с непреодолимыми трудностями при реализации 64-битной виртуальной машины. Поскольку, для отделения кода монитора от кода «гостя» программой использовался механизм сегментации, эта задача стала практически неразрешимой. Осознав свою ошибку, AMD вернула ограниченный вариант сегментной организации памяти начиная с ревизии D архитектуры AMD64, что позволило запускать 64-битные ОС в виртуальных машинах. Intel, однако, этому примеру не последовала, и поэтому ни на одном её процессоре, не поддерживающем средства аппаратной виртуализации, запустить 64-битную виртуальную машину нельзя. С целью проверки того, возможен ли на данном процессоре запуск 64-битных гостевых ОС или нет, VMWare предоставляет вместе со своими продуктами специальную утилиту. Также следует отметить, что первоначально попавшие «под нож» команды LAHF и SAHF, которые также активно используются ПО виртуализации, затем также были возвращены в систему команд. С распространением средств аппаратной виртуализации потребность в сегментации вновь постепенно отпадет.

Есть ли разница какие регистры использовать?

На этот вопрос нельзя ответить однозначно, все зависит от конкретного случая. Например если функция берет значение для какой-то своей работы из регистра eax (это только к примеру), то, если мы положим это значение в регистр ecx, функция об этом не узнает, и все равно возьмет значение из регистра eax. А что там будет лежать, если мы поместили нужное значение не в eax, а в ecx, только одному Богу известно. Но вот другой пример:

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

Чем отличается регистр eax от ax?

eax = Extended ax, т.е. расширенный регистр ax. eax, в отличие от ax, является 32-х разрядным регистром (ax — 16-ти разрядный регистр, хранит в себе 2 байта), т.е. способен хранить в себе 4 байта. ax является младшей частью регистра eax, т.е., при изменении регистра ax, регистр eax тоже будет меняться. Аналогичное ситуация и с другими регистрами (ebx, ecx, edx, esp, ebp и т.д.)

А что значит младшая часть?

Регистр eax (беру eax просто для примера) является 32-х разрядным. Если представить его значение в двоичной системе счисления как последовательность из 32-х нулей и единиц, то, если взять правые 16 бит подряд, это и будет младшая часть регистра eax, которая будет определять значение регистра ax. Левые 16 бит подряд — это старшая часть регистра eax. Аналогично, 16-ти разрядный регистр ax делится на регистр ah и al, которые соответственно являются старшей и младшей частями регистра ax. Также регистр ebx (ecx, edx тоже) например делится на старшую часть и младшую часть. Младшая часть определяет значение регистра bx, который в свою очередь делится на bh и bl. Если вам что-то не понятно с разрядами и представлением в двоичной (и других) системе счисления, то почитайте про системы счисления.

Как найти старшую часть расширенного регистра (eax, ebx, . esi, edi)?

Предлагаю два способа:

1) Например надо найти старшую часть регистра esi и поместить ее в ax. Это достигается следующей парой команд:

Поясняю. Старшая часть регистра eax — это его левые (старшие) 16 разрядов. Если мы эти 16 разрядов сдвинем влево на 16 позиций, то они окажутся как раз на месте, где до этого были правые (младшие) 16 разрядов, т.е. в регистре ax. Все!

2) Например надо найти старшую часть регистра ebx. Для этого пишем:

После этого все разряды регистра ebx сдвинутся по кругу на 16 позиций вправо. Старшие 16 разрядов окажутся на месте младших 16 разрядов. А младшие 16 разрядов окажутся на месте старших =) Аналогично, в регистре bx окажется старшая часть предыдущего состояния регистра ebx. Надеюсь понятно =)

Программная модель центрального процессора

Центральный процессор (ЦП) — устройство, непосредственно предназначенное для выполнения вычислительных операций. Процессор работает под управлением программы, выполняя вычисления или принимая логические решения, необходимые для обработки информации.
Большинство современных центральных процессоров строятся на базе 32-битной архитектуры Intel-совместимых процессоров IA-32 (Intel Architecture), которая является третьим поколением базовой архитектуры x86.

Структура центрального процессора

Функционально центральный процессор можно разделить на две части:

  • операционную, содержащую арифметико-логическое устройство (АЛУ) и микропроцессорную память (МПП) — регистры общего назначения;
  • интерфейсную, содержащую адресные регистры, устройство управления, регистры памяти для хранения кодов команд, выполняемых в ближайшие такты; схемы управления шиной и портами.

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

Арифметико-логическое устройство (АЛУ) предназначено для выполнения арифметических и логических операций преобразования информации.

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

  • Шина данных – служит для пересылки данных между процессором и оперативным запоминающим устройством (ОЗУ).
  • Шина адреса – используется для передачи сигналов, с помощью которых определяется местоположение ячейки памяти для выполняемых процессором операций чтения/записи и ввода-вывода.
  • Шина управления – служит для пересылки управляющих сигналов. Каждая линия этой шины имеет своё особое назначение, поэтому они могут быть как однонаправленными, так и двунаправленными.
Микропроцессорная память

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

  • регистры общего назначения;
  • сегментные регистры;
  • регистр счетчика команд;
  • регистр признаков.

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

Набор регистров общего назначения 32-битной архитектуры центрального процессора включает в себя

  • 4 универсальных регистра: EAX, EBX, ECX, EDX ;
  • 2 индексных регистра: ESI, EDI ;
  • 2 регистра для работы со стеком: ESP, EBP .

Каждый из 32-разрядных универсальных регистров представляет собой логическое объединение, позволяющее отдельно обращаться к своей младшей 16-разрядной части: AX, BX, CX, DX . Каждый 16-разрядный регистр позволяeт независимо обращаться к старшему ( H ) и младшему ( L ) байту. Соответствующие 8-разрядные регистры имеют имена AH, AL, BH, BL, CH, CL, DH, DL .

Регистр EAX (аккумулятор) – автоматически применяется при операциях умножения, деления и при работе с портами ввода-вывода. Его использование в арифметических, логических и некоторых других операциях позволяет увеличить скорость их выполнения. Использует для записи возвращаемого значения из процедуры.
Регистр EBX (регистр базы) – может содержать адреса элементов оперативной памяти. По умолчанию эти адреса будут представлять собой смещение в сегменте данных.
Регистр ECX (счетчик) – используется в операциях повторения, например в циклах, в строковых командах и т.д.
Регистр EDX (регистр данных) – является единственным элементом, который может хранить адреса портов ввода-вывода в командах типа IN (получить из порта) и OUT (вывести в порт). Без его помощи невозможно обратиться к портам с адресами в адресном пространстве больше 1 байта. Автоматически применяется также в операциях умножения и деления.

Каждый электрик должен знать:  Как можно использовать светодиодную ленту

Индексные регистры используются для выполнения косвенной адресации, а также автоматически используются в строковых командах. Каждый 32-разрядный индексный регистр представляет собой логическое объединение, позволяющее отдельно обратиться к своей младшей 16-разрядной части.
Регистр ESI (регистр индекса источника) может содержать адреса элементов в оперативной памяти. По умолчанию эти адреса будут представлять собой смещение в сегменте данных. При выполнении операций со строками в этом регистре содержится смещение строки источника в сегменте данных.
Регистр EDI (регистр индекса приемника) может содержать адреса элементов в оперативной памяти. По умолчанию эти адреса будут представлять собой смещение в сегменте данных. При выполнении операций со строками в этом регистре содержится смещение строки приемника в сегменте данных.

Регистры для работы со стеком используются для хранения вершины стека ( ESP ) и текущего элемента (базы) — EBP . Каждый 32-разрядный регистр для работы со стеком представляет собой логическое объединение, позволяющее отдельно обратиться к своей младшей 16-разрядной части.
Регистр EBP (указатель базы) может содержать адреса элементов в оперативной памяти. Эти адреса будут представлять собой смещение в сегменте стека.
Регистр ESP (указатель стека) используется для записи данных в стек и чтения их из стека. Фактически он содержит смещение в сегменте стека, которое определяет нужное слово памяти. Значения этого регистра автоматически меняются командами для работы со стеком типов push, pop, pushf, popf, call, ret .

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

Регистр CS (регистр сегмента кода) определяет стартовый адрес сегмента, в который помещается код выполняемой программы. Это единственный сегментный регистр, который нельзя загрузить непосредственно. Косвенно загрузить в регистр CS новое значение могут команды вида jxx, call, int, ret, iret .
Регистр DS (регистр сегмента данных) определяет стартовый адрес сегмента, в который помещаются данные для программы. По умолчанию смещения в сегменте данных задаются в регистрах EBX , ESI и EDI .
Регистр SS (регистр сегмента стека) определяет стартовый адрес сегмента, в который помещается стек для программы. По умолчанию смещения для сегмента стека задаются в регистрах ESP и EBP .
Регистры ES, FS, GS (регистры сегментов дополнительных данных) опредляют стартовый адрес сегмента, в который помещаются дополнительные данные для программы. Например, в случае строковых команд, DS определяет сегмент для строки-источника, а ES – сегмент для строки-приемника. За исключением строковых команд, доступ к данным в сегменте ES обычно менее эффективен, чем в сегменте DS .

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

Обычно команды выполняются в той последовательности, в которой они расположены в программе. Нарушают эту последовательность только команды переходов (они начинаются с буквы j: jxx ), команды вызова подпрограммы ( call ), обработчиков прерываний ( int ) и возврата ( ret, iret ). Непосредственно содержимое EIP нельзя изменить или прочитать. Косвенно загрузить в регистр EIP новое значение могут только команды jxx, call, int, ret, iret . Регистр EIP является 32-битным. Младшая 16-битная часть регистра счетчика команд имеет имя IP .

Регистр признаков
Регистр признаков EFLAGS включает биты, каждый из которых устанавливается в единичное или в нулевое состояние при определенных условиях. Регистр EFLAGS 32-битный. Младшая 16-битная часть регистра признаков имеет имя FLAGS .

Все биты регистра признаков подразделяются на

  • s — биты состояния ( STATUS );
  • c — биты управления ( CONTROL );
  • x — системные биты ( SYSTEM ).

CF – бит переноса: устанавливается в 1, когда арифметическая операция генерирует перенос или выход за разрядную сетку результата. сбрасывается в 0 в противном случае. Этот флаг показывает состояние переполнения для беззнаковых целочисленных арифметических действий. Он также используется в арифметических действиях с повышенной точностью. Может быть установлен командой STC или сброшен командой CLC .

PF – бит четности: устанавливается в 1, если результат последней операции имеет четное число единиц.

AF – бит вспомогательного переноса: устанавливается в 1, если арифметическая операция генерирует перенос из младшей тетрады битов (из 3 бита в 4), сбрасывается в 0 в противном случае. Этот флаг используется в двоично-десятичной арифметике.

ZF – бит нулевого значения: устанавливается в 1, если результат нулевой, сбрасывается в 0 в противном случае.

SF – знаковый бит: устанавливается равным старшему биту результата, который определяет знак в знаковых целочисленных операциях (0 – положительное число, 1 – отрицательное число).

TF – бит пошаговой отладки: устанавливается в 1 для включения режима пошаговой отладки программы, сбрасывается в 0 в противном случае.

IF – бит прерываний: при значении 1 микропроцессор реагирует на внешние аппаратные прерывания по входу INTR. При значении 0 микропроцессор игнорирует внешние прерывания.

DF – бит направления: управляет строковыми командами ( MOVS, CMPS, SCAS, LODS, STOS ). Если DF = 1 (команда STD ), то содержимое индексных регистров ESI, EDI увеличивается, если DF = 0 (команда CLD ), то содержимое индексных регистров ESI, EDI уменьшается.

OF – бит переполнения: устанавливается в 1, если целочисленный результат выходит за пределы разрядной сетки. Тем самым данный бит указывает на потерю старшего бита результата.

IOPL – уровень приоритета: 2-битовое поле, которое отображает уровень приоритета ввода-вывода для выполняемой в данное время программы или задачи. Действительный приоритет задачи может быть меньше или равен IOPL.

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

RF — флаг возобновления: используется при обработке прерываний от регистров отладки.

VM — флаг виртуального 8086: признак работы процессора в режиме виртуального 8086: 1 – процессор работает в режиме виртуального 8086, 0 – процессор работает в реальном или защищенном режиме.

AC — флаг контроля выравнивания: предназначен для разрешения контроля выравнивания при обращениях к памяти. Если требуется контролировать выравнивание данных и команд по адресам, кратным 2 или 4, то установка данных битов приведет к тому, что все обращения по некратным адресам будут вызывать исключительную ситуацию.

VIF — флаг виртуального прерывания: при определенных условиях (одно из которых – работа микропроцессора в V-режиме) является аналогом флага IF . Флаг VIF используется совместно с флагом VIP .

VIP — флаг отложенного виртуального прерывания: устанавливается в 1 для индикации отложенного прерывания. Используется совместно с VIF в виртуальном режиме.

ID — флаг поддержки идентификации процессора: используется для отображения поддержки микропроцессором инструкции CPUID .

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

К регистрам общего назначения (РОН) могут непосредственно адресоваться команды программы, поэтому каждый из них имеет собственные символьные наименования: В, С, D, Е, Н, L. Так как в рассматриваемом микропроцессоре шина данных 8-разрядная, все РОН также имеют 8 разрядов. Только программный счетчик и специализированный регистр указателя стека имеют по 16 разрядов. Так как РОН аппаратно выполнены в большой интегральной схеме (БИС) центрального процессора, команды обмена информацией с ними выполняются всего за 2 – 3 машинных такта, и поэтому РОН обладают более высоким быстродействием, чем любая другая память, к которой может обращаться микропроцессор. Иными словами, РОН выполняет функции сверхоперативного запоминающего устройства (СОЗУ).

Особыми свойствами обладают регистры Н и L, которые могут использоваться как программно-доступные РОН, но наряду с этим они специализированы для хранения косвенных адресов операндов, находящихся в основной памяти. Такая специализация позволяет оставлять в командах ограниченное число разрядов, необходимых для указания адресов с помощью этих регистров. Буквы Н и L являются сокращениями английских слов «higher» (выше) и «lower» (ниже) и совместно используются для обозначения соответственно старшего и младшего байтов 16-разрядного адреса ячейки памяти, в которой хранится операнд.

Не только в регистрах Н и L, но и в других РОН при операциях с адресами может использоваться принцип тандемных пересылок. Суть его состоит в том, что, по­скольку адресная шина 16-разрядная, содержимое каждой регистровой пары В и С, D и Е, Н и L рассматривается как одно слово удвоенной разрядности.

Центральный процессор имеет в своем составе также схему инкрементора/декрементора (INC/DEC), которая позволяет при обработке адресов, команд и данных производить увеличение и уменьшение на 1 непосредственно в блоке РОН, освобождая от этого арифметико-логическое устройство (АЛУ). Устройство инкрементор/декрементор, реализованное в виде достаточно простой комбинационной схемы, выполняет операции INC и DEC в процессе межрегистровых пересылок. Использование этой специализированной схемы позволяет реализовать процедуры автоматического приращения при операциях с адресами в счетчиках команд, указателе стека, регистрах косвенного адреса и т.д.

Входящие в состав блока РОН регистры W и Z используются при работе с командами длиной два и три машинных слова (двух- и трехбайтными). Выборка таких команд производится соответственно за два или три ма­шинных цикла, при этом первый байт команды заносится в регистр команд, второй – в регистр W, а третий – в ре­гистр Z.

Регистры

Назначение регистров

Регистром называют последовательностное устройство, выполненное на триггерах того или иного типа. Его основной функцией является хранение данных (информации) в виде N-разрядного двоичного кода. Двоичный код фиксируется на N триггерах. Занесение новых данных в регистр называется операцией записи (записью), вывод данных из регистра – операцией считывания (считыванием). Обмен информацией между регистром и внешними устройствами может происходить в последовательном и (или) параллельном кодах.

Классификация регистров

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

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

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

Рассмотрим особенности основных типов регистров, иллюстрируя принципы их построения и работы для N= 4.

Последовательные регистры

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

Схема 4-разрядного регистра, построенного на D-триггерах с асинхронными /?5-входами, приведена на рис. 3.27, а.

В приведенной схеме RS-входы задействованы для сброса регистра путем подачи на каждый триггер сигналов R = 0, 5 1. =

Правила работы JV-разрядного регистра отражены в табл. 3.10. При этом следует иметь в виду, что п = 1, . JV – 1, выход

Assembler

Изучение с «нуля»

понедельник, 4 мая 2009 г.

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

Регистры – это ячейки памяти расположенные в процессоре. Их достоинство заключается в гораздо большем быстродействии, чем у оперативной памяти. Недостаток – их очень мало, всего чуть больше десятка.
На рисунке ниже представлены регистры процессора 8086. Такие же самые регистры имеются во всех старших моделях процессоров — 286, 386, 486 и Pentium (хотя старшие процессоры имеют дополнительные регистры и расширения). Если использовать при написании программ только эти регистры, то программы (по идее) будут исполнятся на всех компьютерах с Intel совместимыми процессорами. Регистры делятся на пять категорий:

  • Регистры общего назначения (ax, bx, cx, dx)
  • Регистровые указатели и индексные регистры (sp, bp, si, di)
  • Сегментные регистры (cs, ds, ss, es)
  • Регистр командного указателя (ip)
  • Регистр флагов

Все регистры процессора 8086 являются 16-битовыми. Кроме того, четыре регистра общего назначения – ax, bx, cd, dx — разделены на старшую ( high ) и младшую ( low ) 8-битовые половины. Это позволяет оперировать либо всем 16-битовым регистром (например, ax), либо обращаться отдельно к старшей (ah) или младшей (al) половинам регистра.

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

  • регистр AX ( accumulator ) — умножение, деление, обмен с устройствами ввода/вывода (команды ввода и вывода);
  • регистр BX ( base ) — базовый регистр в вычислениях адреса, часто указывает на начальный адрес (называемый базой) структуры в памяти;
  • регистр CX ( count ) — счетчик циклов, определяет количество повторов некоторой оперции;
  • регистр DX ( data ) — определение адреса ввода/вывода, так же может содержать данные, передаваемые для обработки в подпрограммы.

Эти определения, ни коим образом, не являются полными, и большую часть времени вы сами решаете, как использовать эти регистры общего назначения. Например, несмотря на то, что cx назван регистром-счетчиком, ни что не мешает использовать для подсчета регистр bx. Однако в ряде случаев некоторые команды процессора 8086 требуют строго определенных регистров .

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

Регистровые указатели SP и BP обеспечивают доступ к данным в сегменте стека.

  • регистр SP ( Stack Pointer ) – всегда указывает на вершину стека, позволяет временно хранить адреса и иногда данные;
  • регистр BP ( Base Pointer ) – обычно адресует переменные, хранимые в стеке, облегчает доступ к параметрам (данным и адресам), переданным через стек.

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

  • регистр SI ( Source Index ) – является индексом источника и применяется для некоторых операций над строками (обычно связан с регистром DS);
  • регистр DI ( Destination Index ) – является индексом назначения и применяется так же для строковых операций (обычно связан с регистром ES).
Каждый электрик должен знать:  Защита кабеля от механических повреждений ПУЭ, фото, видео

Сегментные регистры (CS, DS, SS, ES) определяют в памяти начала четырех 64 Кбайтовых сегментов, которые называются текущими сегментами .
Программа может распределять более четырех сегментов, но при этом для адресации дополнительных сегментов она должна перемещать, соответствующие им правильные значения адресов между одним или несколькими сегментными регистрами. Сегментные регистры строго специализированны. С помощью них нет возможности выполнять математические вычисления или хранить в них результаты других операций. Действительный порядок сегментов не обязательно совпадает с порядком, показанным на рисунке. Сегменты могут в любом порядке храниться в произвольных местах памяти.

  • регистр CS ( Code Segment ) – содержит начальный адрес сегмента когда (начало машинного кода программы). Этот адрес плюс значение смещения в командном указателе (IP) определяет адрес команды, которая должна быть выбрана для выполнения;
  • регистр DS ( Data Segment ) – содержит начальный адрес сегмента данных (переменных, строк и т.п. данных, которыми оперирует программа);
  • регистр SS ( Stack Segment ) – содержит начальный адрес сегмента стека;
  • регистр ES ( Extra Segment ) – является вспомогательным регистром, используется при некоторых операциях над строками. В большинстве программ в ES и DS содержатся одинаковые адреса, но он может упрощать некоторые операции связанные с этими регистрами.

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

Регистр флагов так же состоит из 16 бит , из них используются только 9 .

Это регистр состояния процессора. Биты регистра состояния устанавливаются или очищаются в зависимости от результата исполнения предыдущей команды и используются некоторыми командами процессора. Биты регистра состояния могут также устанавливаться и очищаться специальными командами процессора. Отдельные биты флагов представляют одиночными буквами o, d, i, t, s, z, a, p, c или двумя буквами of, df, if, tf, sf, zf, af, pf и cf.

CF ( Carry Flag ) — флаг переноса при арифметических операциях. Содержит перенос из старшего бита после арифметических операций, а так же последний бит при сдвигах или циклических сдвигах.
PF ( Parity Flag ) — флаг четности результата, показывает четность младших восьмибитовых данных (1 – четное, 0 – нечетное).
AF ( Auxiliary Flag ) — флаг дополнительного переноса. Содержит перенос из 3 бита для 8-битовых данных, используется для специальных арифметических операций.
ZF ( Zero Flag ) — флаг нулевого результата. Показывает результат арифметических операций и операций сравнения (0 – ненулевой, 1 – нулевой результат).
SF ( Sign Flag ) — флаг знака (совпадает со старшим битом результата, 0 – плюс, 1 — минус).
TF ( Trap Flag ) — флаг пошагового режима (используется при отладке).
IF ( Interrupt-enable Flag ) — флаг разрешения аппаратных прерываний.
DF ( Direction Flag ) — флаг направления при строковых операциях. Обозначает левое или правое направление пересылки или сравнения строковых данных.
OF ( Overflow Flag ) — флаг переполнения. Указывает на переполнение старшего бита при арифметических командах.

Лекция 2: Регистровая структура универсального микропроцессора

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

В универсальном 32-разрядном микропроцессоре выделяют следующие группы регистров:

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

Первые две группы регистров используются прикладными программами, последние две группы — системными программами , имеющими наивысший уровень привилегий .

Рассмотрим каждую из этих групп подробнее.

Основные функциональные регистры

В состав регистров этой группы входят:

  • регистры общего назначения;
  • регистр указателя команд;
  • регистр флагов ;
  • сегментные регистры .

Состав и структура регистров общего назначения представлены на рис. 2.1.

Блок состоит из восьми 32-разрядных регистров. К каждому из них можно обращаться как к одному двойному слову (32 разряда).

Отметим, что понятие » слово » в данной архитектуре не идентично разрядности микропроцессора. Исторически сложилось так, что под словом понимается единица информации длиной 2 байта, или 16 двоичных разрядов. К младшим 16 разрядам регистров общего назначения можно обращаться так же, как и в 16-разрядном микропроцессоре (AX, BX… SP ). Четыре 16-разрядных регистра AX , BX , CX , DX допускают обращение отдельно к своему старшему и младшему байту. Тем самым регистры позволяют на программном уровне работать либо с восемью 32-разрядными, либо с восемью 16-разрядными, либо с восемью 8-разрядными регистрами.

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

Кроме того, ряд регистров этого блока имеют свое, присущее только им назначение:

  • EAX/AX/AL — регистр-аккумулятор, используется для сокращения длины команды при работе с непосредственными операндами;
  • AX/AL — приемник (источник) данных в командах ввода (вывода) данных из (в) внешнего устройства;
  • DX — определяет адрес ВУ в командах ввода (вывода) данных;
  • ECX — используется в качестве счетчика циклов в командах циклов ;
  • BP , SP — используются при работе со стеком;
  • ESI , EDI ( DI , SI ) — определяют положение строк в памяти в командах обработки строк.

Регистр указателя команд и регистр флагов имеют длину 32 разряда.

Младшее слово каждого из этих регистров (разряды 0-15) функционально соответствует аналогичным разрядам в 16-разрядном микропроцессоре (рис. 2.2).

Регистр указателя команд EIP хранит смещение адреса команд относительно начала сегмента кода (сегмента команд).

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

К битам состояния регистра флагов относятся:

  • ZF — признак нуля результата ( ZF = 1 , если все разряды результата равны 0);
  • SF — знак результата ( SF = 1 , если старший разряд результата равен 1, то есть если результат отрицательный);
  • OF — признак переполнения ( OF = 1 , если при выполнении арифметических операций над числами со знаком происходит переполнение разрядной сетки);
  • CF — флаг переноса ( CF = 1 , если выполнение операции сложения приводит к переносу за пределы разрядной сетки), устанавливается также в некоторых других операциях;
  • PF — признак четности (дополняет до нечетного числа единиц младший байт результата);
  • AF — флаг полупереноса (используется при операциях над двоичнодесятичными числами);
  • DF — устанавливается пользователем и определяет порядок обработки строк символов в соответствующих командах: декремент (при DF = 1 ) или инкремент (при DF = 0 ) содержимого индексных регистров ESI , EDI ( SI , DI ) после обработки одного символа.

В состав флагов управления входят:

  • IF — флаг прерываний (при IF = 1 разрешается обработка маскированных аппаратных прерываний );
  • TF — флаг ловушки , или трассировки (при ТF = 1 после выполнения каждой команды возникает прерывание, используемое отладчиками;);
  • NТ — бит вложенной задачи (показывает, что данная задача была вызвана из другой программы, аналогично подпрограмме, и возврат из этой задачи должен проводиться по механизму переключения задач);
  • IOPL — 2-разрядное поле уровня привилегий ввода/вывода (определяет уровень привилегий программ, которым разрешено выполнение операции ввода-вывода);
  • VM — режим виртуального микропроцессора i8086 (при работе микропроцессора в защищенном режиме установка VM = 1 вызывает переключение в режим виртуального микропроцессора i8086; в этом случае микропроцессор функционирует как быстрый МП i8086, но реализует механизмы защиты памяти , страничной адресации и ряд других дополнительных возможностей; бит VM может быть установлен только в защищенном режиме).

Блок сегментных регистров состоит из шести 16-разрядных регистров, которые указывают на различные сегменты , расположенные в памяти компьютера:

  • CS ( Code Segment ) — сегмент кода программы;
  • DS ( Data Segment ) — сегмент данных;
  • SS ( Stack Segment ) — сегмент стека;
  • ES , FS , GS — дополнительные сегменты данных.

При работе микропроцессора в реальном режиме в сегментном регистре содержатся старшие 16 разрядов 20-разрядного базового адреса сегмента. Физический адрес начала сегмента получается умножением этой величины на 16:

Получающийся 20-разрядный адрес позволяет адресовать память емкостью 2 20 байт = 1 Мбайт. При этом сегменты имеют постоянную длину 2 16 байт . Разработчики первых персональных компьютеров полагали, что оперативная память , большая чем 1 Мбайт, никогда не потребуется пользователю, поэтому вся архитектура строилась исходя именно из этого положения.

При переходе к 32-разрядной архитектуре стало необходимым обеспечить возможность адресации памяти емкостью до 2 32 байт . Кроме того, введение защищенного режима работы микропроцессора потребовало хранения большого количества дополнительной информации о сегменте: его длине, которая стала переменной, уровне привилегий, его типе и т. д. Простое увеличение разрядности сегментных регистров до 32 бит не обеспечило бы возможности хранения всей этой информации. Поэтому все данные о сегменте стали размещаться в специальных структурах — дескрипторах (описателях) сегментов, которые хранятся в таблицах дескрипторов, расположенных в памяти, а сегментные регистры , сохранив свою первоначальную длину в 16 разрядов, содержат так называемый селектор ( указатель ), который используется для того, чтобы найти нужный дескриптор в этих таблицах.

Регистры процессора с плавающей точкой

К этой группе регистров относятся (рис. 2.3):

Обучение : Программирование на Ассемблере для PIC

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

РЕГИСТРЫ ОБЩЕГО НАЗНАЧЕНИЯ используются для записи и хранения переменных и констант. Регистры общего назначения также находятся в области оперативной памяти и нумерация их адресов продолжает нумерацию регистров специального назначения.

Ранее мы определили, что каждый регистр имеет адрес, но мы не определили, что такое имена регистров или наименования. Для удобства программирования «числовым» адресам регистров сопоставляют «буквенные» имена. Например, регистру с адресом 03 можно дать имя STATUS (о том, как сделать сопоставление см. в главе 2).

– регистры специального назначения имеют определенные имена, которые отражены в документации; не рекомендуется регистрам специального назначения присваивать другие имена (например, регистр STATUS переименовать в STAT);
– регистрам общего назначения, как правило, не присваивают имена, определенные для регистров специального назначения;
– имена регистров не должны совпадать по написанию с командами;
– в тексте программы необходимо придерживаться единообразного написания имени. Например, имя PER, Per и per разные имена; рекомендую придерживаться единого стиля в написании;
– имена набираются на английской раскладке без пробелов «разумной» длины, допускается символ нижнего подчеркивания «_» и цифры.

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

Здесь может быть
ваша реклама

Понравилась конструкция,
но не можете собрать?

Обращайтесь, мы удовлетворим
ваши запросы и пожелания!
Напишите нам письмо.

Большая Энциклопедия Нефти и Газа

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

Регистром общего назначения , где выполняется основная часть обработки данных, является аккумулятор, причем в микропроцессоре Z80 он называется регистром А, а в микропроцессоре COSMAC — регистром D. Для всех микро — ЭВМ, имеющих аккумулятор, возможно большое многообразие команд работы с аккумулятором. Типичными командами такого рода являются команды пересылки данных в аккумулятор и из него, а также команды сдвига или циклического сдвига содержимого аккумулятора влево или вправо. Поскольку емкость аккумулятора в большинстве микро — ЭВМ составляет лишь 8 бит, для связи при многобайтовых операциях используется один внешний по отношению к аккумулятору разряд, называемый разрядом переноса. [31]

Все регистры общего назначения имеют длину полного слова ( 32 бита) и могут быть использованы для хранения данных при выполнении арифметических и логических операций, а также в качестве индексных регистров в операциях над адресами и при индексации. Регистры общего назначения имеют нумерацию с О до 15, и обращение к ним осуществляется по содержимому 4-битового поля R команды. Каждый регистр с плавающей запятой имеет разрядность слова двойной длины ( 64 бита) и может содержать двоичное число в форме с плавающей запятой любого формата: короткого, длинного или повышенной точности. [33]

Требуется регистр общего назначения , но он недоступен для обращения. [34]

Все регистры общего назначения 64-битные. Все они, кроме RO, значение которого всегда равно 0, могут считываться и записываться при помощи различных команд загрузки и сохранения. Функции, приведенные в табл. 5.1, отчасти определены по соглашению, но отчасти основаны на том, как аппаратное обеспечение обрабатывает их. Вообще не стоит отклоняться от этих функций, если вы не являетесь крупным специалистом, блестяще разбирающимся в компьютерах SPARC. Программист должен быть уверен, что программа правильно обращается к регистрам и выполняет над ними допустимые арифметические действия. Например, очень легко загрузить числа с плавающей точкой в регистры общего назначения, а затем произвести над ними целочисленное сложение, операцию, которая приведет к полнейшей чепухе, но которую центральный процессор обязательно выполнит, если этого потребует программа. [36]

Распределение регистров общего назначения произ-ведим по ходу написания программы. [38]

Содержимое регистра общего назначения рассматривается как изменяющееся, если в этот регистр заносится новое значение. Распознавание события не зависит от того, равны или не равны новое и предыдущее значения. [39]

Содержимое регистров общего назначения исправляется командами: переход с возвратом BAL, BALR, загрузка LRt загрузка адреса LA. Команды загрузка L и загрузка групповая LM производят исправление только в том случае, если операнд находится на границе слова. Команда загрузка полу слова LH исправляет содержимое регистра, если операнд находится на границе полуслова. [40]

Число регистров общего назначения характеризует объем сверхоперативной памяти МП с малым временем обращения. Количество РОН в ЛШ колеблется от 2 до 64 и служит одним из показателей вычислительных возможностей прибора. [41]

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

Блок регистров общего назначения РОН состоит из 16 шестнадцатиразрядных регистров, построенных на четырех ИС. Блок-двух-канальный и двухадресный, позволяет выдавать на магистрали А и В процессора одновременно содержимое двух регистров РОН. [43]

В регистрах общего назначения микропроцессора находится следующая информация: в HL — у, в ВС — р, в DE-счетчик шагов по оси для проверки окончания отрезка. [44]

В ЦП регистры общего назначения обеспечивают более быстрый доступ к операндам, так как при обращении к операндам этап считывания из памяти оказывается уже выполненным. [45]

Добавить комментарий