Регистры

Архитектура ПК.

Архитектура ЭВМ – это абстрактное представление ЭВМ, которое отражает ее структурную, схемотехническую и логическую организацию.

Все современные ЭВМ обладают некоторыми общими и индивидуальными свойствами архитектуры. Индивидуальные свойства присущи только конкретной модели компьютера.

Понятие архитектуры ЭВМ включает в себя:

- структурную схему ЭВМ;

- средства и способы доступа к элементам структурной схемы ЭВМ;

- набор и доступность регистров;

- организацию и способы адресации;

- способ представления и формат данных ЭВМ;

- набор машинных команд ЭВМ;

- форматы машинных команд;

- обработка прерываний.

Основные элементы аппаратных средств компьютера: системный блок, клавиатура, устройства отображения, дисководы, печатающие устройства (принтер) и различные средства связи. Системный блок состоит из системной платы, блока питания и ячеек расширения для дополнительных плат. На системной плате размещены микропроцессор, постоянная память (ROM), оперативная память (RAM) и сопроцессор.

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

Пользовательские регистры используются программистом для написания программ. К этим регистрам относятся:

- восемь 32-битных регистров (регистры общего назначения) EAX/AX/AH/AL, EBX/BX/BH/BL, ECX/CX/CH/CL, EDX/DX/DLH/DL, EBP/BP, ESI/SI, EDI/DI, ESP/SP;

- шесть 16 -,битовых регистров сегментов: CS,DS, SS, ES, FS,GS;

- регистры состояния и управления: регистр флагов EFLAGS/FLAGS, и регистр указателя команды EIP/IP.

Через наклонную черту приведены части одного 32-разрядного регистра. Приставка E (Extended) обозначает использование 32-разраядного регистра. Для работы с байтами используются регистры с приставками L (low) и H(high), например, AL,CH - обозначающие младший и старший байты 16-разрядных частей регистров.

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

EAX/AX/AH/AL(Accumulator register) – аккумулятор. Используются при умножении и делении, в операциях ввода-вывода и в некоторых операциях над строками.

EBX/BX/BH/BL – базовый регистр (base register), часто используется при адресации данных в памяти.

ECX/CX/CH/CL – счетчик (count register), используется как счетчик числа повторений цикла.

EDX/DX/DH/DL – регистр данных (data register), используется для хранения промежуточных данных. В некоторых командах использование его обязательно.

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

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

ESI/SI (source index register) – индекс источника. Содержит адрес текущего элемента источника.

EDI/DI (distination index register) – индекс приемника (получателя). Содержит текущий адрес в строке приемнике.

В архитектуре микропрцессора на программно-аппаратном уровне поддерживается структура данных – стек. Для работы со стеком есть специальные команды и специальные регистры. Следует отметить, что стек заполняется в сторону меньших адресов.

ESP/SP (stack poINTer register) – регистр указателя стека. Содержит указатель вершины стека в текущем сегменте стека.

EBP/BP (base poINTer register) – регистр указателя базы стека. Предназначен для организации произвольного доступа к данным внутри стека.

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

В программной модели микропроцессора имеются шесть сегментных регистров: CS, SS, DS, ES, GS, FS. Их существование обусловлено спецификой организации и использования оперативной памяти микропроцессорами Intel. Микропроцессор аппаратно поддерживает структурную организацию программы состоящей из сегментов. Для указания сегментов доступных в данный момент предназначены сегментные регистры. Микропроцессор поддерживает следующие типы сегментов:

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

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

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

4. Дополнительный сегмент данных. Обрабатываемые данные могут находиться еще в трех дополнительных сегментах данных. По умолчанию предполагается, что данные находятся в сегменте данных. При использовании дополнительных сегментов данных их адреса требуется указать явно с помощью специальных префиксов переопределения сегментов в команде. Адреса дополнительных сегментов данных должны содержаться в регистрах ES, GS, FS (extenSIon data segment registers).

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

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

- регистр указателя команд EIP/IP;

- регистр флагов EFLAGS/FLAGS.

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

EIP/IP (instruction poINTer register) – указатель команд. Регистр EIP/IP имеет разрядность 32 или 16 бит и содержит смещение следующей выполняемой команды относительно содержимого сегментного регистра CS в текущем сегменте команд. Этот регистр непосредственно недоступен, но изменение его производится командами перехода.

EFLAGS/FLAGS (Flag register) – регистр флагов. Разрядность 32/16 бит. Отдельные биты данного регистра имеют определенное функциональное назначение и называются флагами. Флаг - это бит, принимающий значение 1 ("флаг установлен"), если выполнено некоторое условие, и значение 0 ("флаг сброшен") в противном случае. Младшая часть этого регистра полностью аналогична регистру FLAGS для i8086.

1.1.3 Регистр флагов

Регистр флагов является 32-разрядным, имеет имя EFLAGS (рис.1). Отдельные биты регистра имеют определенное функциональное назначение и называются флагами. Каждому из них присвоено определенное имя (ZF, CF и т.д). Младшие 16 бит EFLAGS представляют 16-разрядный регистр флагов FLAGS, используемый при выполнении программ, написанных для микропроцессора i086 и i286.

  .                                      
    AC V RF   NT   IOPL OF DF IF TF SF ZF   AF   PF   CF  
                                                     

Рис.1 Регистр флагов

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

Флаги условий:

CF (carry flag) - флаг переноса. Принимает значение 1, если при сложении целых чисел появилась единица переноса, не "влезающая" в разрядную сетку, или если при вычитании чисел без знака первое из них было меньше второго. В командах сдвига в CF заносится бит, вышедший за разрядную сетку. CF фиксирует также особенности команды умножения.

OF (overflow flag) - флаг переполнения. Устанавливается в 1, если при сложении или вычитании целых чисел со знаком получился результат, по модулю превосходящий допустимую величину (произошло переполнение мантиссы и она "залезла" в знаковый разряд).

ZF (zero flag) - флаг нуля. Устанавливается в 1, если результат команды оказался равным 0.

SF (SIgn flag) - флаг знака. Устанавливается в 1, если в операции над знаковыми числами получился отрицательный результат.

PF (parity flag) - флаг четности. Равен 1, если результат очередной команды содержит четное количество двоичных единиц. Учитывается обычно только при операциях ввода-вывода.

AF (auxiliary carry flag) - флаг дополнительного переноса. Фиксирует особенности выполнения операций над двоично-десятичными числами.

Флаги состояний:

DF (direction flag) - флаг направления. Устанавливает направление просмотра строк в строковых командах: при DF=0 строки просматриваются "вперед" (от начала к концу), при DF=1 - в обратном направлении.

IOPL (input/output privilege level) – уровень привилегий ввода-вывода. Используется в защищенном режиме работы микропроцессора, для контроля доступа к командам ввода-вывода, в зависимости от привилегированности задачи.

NT (nested task) – флаг вложенности задачи. Используется в защищенном режиме работы микропроцессора для фиксации того факта, что одна задача вложена в другую.

Системные флаг:

IF (INTerrupt flag) - флаг прерываний. При IF=0 процессор перестает реагировать на поступающие к нему прерывания, при IF=1 блокировка прерываний снимается.

TF (trap flag) - флаг трассировки. При TF=1 после выполнения каждой команды процессор делает прерывание (с номером 1), чем можно воспользоваться при отладке программы для ее трассировки.

RF (resume flag) – флаг возобновления. Используется при обработке прерываний от регистров отладки.

VM (virtuAL 8086 mode) – флаг виртуального 8086. 1-процессор работает в режиме виртуального 8086. 0- процессор работает в реальном или защищенном режиме.

AC (ALignment check) – флаг контроля выравнивания. Предназначен для разрешения контроля выравнивания при обращении к памяти.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: