Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Arkhitektura_IS.doc
Скачиваний:
9
Добавлен:
15.05.2015
Размер:
406.53 Кб
Скачать
  1. Регистры общего назначения.

Обозначаются буквами А, В, С, D. 16-битные регистры обозначаются как AX, BX, CX, DX, при этом младшие их байты обозначаются, соответственно AL, BL, CL, DL, а старшие как AH, BH, CH, DH. В процессорах IA-32 эти регистры расширены до 32 бит, и для обозначения 32-битных регистров используется приставка E, например, EAX, EBX, ECX, EDX. Отсутствие приставки означает обращение к младшим 16-битам этих расширенных регистров.

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

Регистр EAX/AX/AH/AL (Accumulator register) – регистр-аккумулятор. Применяется для хранения промежуточных данных. В некоторых командах использование этого регистра обязательно.

Регистр EBX/BX/BH/BL (Base register) – применяется для хранения базового адреса некоторого объекта в памяти, например, адреса первого элемента массива.

Регистр EСX/СX/СH/СL (Base register) – регистр-счетчик. Используется как счетчик числа повторений при циклических операциях. Некоторые команды (например, LOOP) изменяют неявно значение этого регистра.

Регистр EDX/DX/DH/DL (Data register) – регистр данных. Также как и регистр EAX/AX/AH/AL хранит промежуточные данные.

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

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

Сегмент кода. В этом сегменте содержатся команды (инструкции) программы. На начальный адрес этого сегмента указывает 16-ти битный сегментный регистр кода CS (Code segment register).

Сегмент данных. Содержит обрабатываемые программой данные (операнды). На начальный адрес этого сегмента указывает 16-битный сегментный регистр данных DS (Data segment register).

Сегмент стека. Этот сегмент представляет собой специально организованную область памяти, называемую стеком. Принцип действия этой памяти – LIFO – последний пришел, первый вышел. На начальный адрес этого сегмента указывает (16-ти битный) сегментный регистр стека SS (Stack segment register).

Дополнительный сегмент данных.

По умолчанию, алгоритмы работы большинства инструкций предполагают, что операнды находятся в сегменте данных. Если программе недостаточно одного сегмента данных, она может использовать еще три дополнительных сегмента данных, но их надо уже указывать явно, с помощью специальных префиксов. Адреса дополнительных сегментов данных должны содержаться в 16-битных регистрах ES, GS, FS.

  1. Регистры смещений.

Служат для хранения относительных адресов ячеек памяти внутри соответствующих сегментов (смещений относительно начала сегментов):

EIP/IP (Instruction Pointer) – смещение адреса текущей команды программы;

ESP/SP (Stack Pointer) – регистр указателя стека, указывает на смещение вершины стека (текущего адреса стека);

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

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

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