Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
arkhitektura.docx
Скачиваний:
50
Добавлен:
12.01.2020
Размер:
216.72 Кб
Скачать

7. Архитектура ia-32. Регистры общего назначения и сегментные регистры.

Регистры процессора — сверхбыстрая память внутри процессора, предназначенная прежде всего для хранения промежуточных результатов вычисления (регистр общего назначения/регистр данных) или содержащая данные, необходимые для работы процессора — смещения базовых таблиц, уровни доступа и т. д. (специальные регистры).

Доступ к значениям, хранящимся в регистрах как правило в несколько раз быстрее чем доступ к ячейкам оперативной памяти (даже если кеш-память содержит нужные данные), но объем оперативной памяти намного превосходит суммарный объем регистров (объем среднего модуля оперативной памяти сегодня составляет 512 Мб - 2 Гб, суммарная «ёмкость» регистров общего назначения/данных для процессора Intel 80x86 16 битов * 4 = 64 бита (8 байтов)).

Регистры процессоров x86 подразделяются на следующие категории:

  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.

Соседние файлы в предмете Архитектура информационных систем