- •Алгоритм в широком смысле – это такая последовательность действий, предназначенная для некого исполнителя этих действий, при котором каждое действие понятно исполнителю.
- •Регистры общего назначения.
- •Сегментные регистры.
- •Регистры смещений.
- •Регистр флагов.
- •Динамическая память.
- •Внутренняя энергонезависимая память.
- •Предсказание условных переходов с последующим декодированием команд, находящихся в предсказанной ветви (branch prediction).
- •По принципу действия.
- •По физической природе элементной базы.
- •По этапам создания.
- •5. По архитектуре.
-
Регистры общего назначения.
Обозначаются буквами А, В, С, 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 хранит промежуточные данные.
-
Сегментные регистры.
Существование этих регистров обусловлено спецификой и организацией использования оперативной памяти. Подробнее с особенностями этой организации мы познакомимся позднее. Сейчас нам важно лишь то, что пространство оперативной памяти логически разбивается на сегменты. Вот для того, чтобы указать на сегменты, к которым программа имеет доступ в конкретный момент времени, и предназначены сегментные регистры. Фактически, с небольшой поправкой (которую мы сделаем позже), в этих регистрах содержатся адреса памяти, с которых начинаются соответствующие сегменты. МП поддерживает следующие типы сегментов:
Сегмент кода. В этом сегменте содержатся команды (инструкции) программы. На начальный адрес этого сегмента указывает 16-ти битный сегментный регистр кода CS (Code segment register).
Сегмент данных. Содержит обрабатываемые программой данные (операнды). На начальный адрес этого сегмента указывает 16-битный сегментный регистр данных DS (Data segment register).
Сегмент стека. Этот сегмент представляет собой специально организованную область памяти, называемую стеком. Принцип действия этой памяти – LIFO – последний пришел, первый вышел. На начальный адрес этого сегмента указывает (16-ти битный) сегментный регистр стека SS (Stack segment register).
Дополнительный сегмент данных.
По умолчанию, алгоритмы работы большинства инструкций предполагают, что операнды находятся в сегменте данных. Если программе недостаточно одного сегмента данных, она может использовать еще три дополнительных сегмента данных, но их надо уже указывать явно, с помощью специальных префиксов. Адреса дополнительных сегментов данных должны содержаться в 16-битных регистрах ES, GS, FS.
-
Регистры смещений.
Служат для хранения относительных адресов ячеек памяти внутри соответствующих сегментов (смещений относительно начала сегментов):
EIP/IP (Instruction Pointer) – смещение адреса текущей команды программы;
ESP/SP (Stack Pointer) – регистр указателя стека, указывает на смещение вершины стека (текущего адреса стека);
EPB/BP (Base Pointer) – регистр указателя базы кадра стека. Предназначен для организации произвольного доступа к данным внутри стека.
ESI/SI (Source Index register) – индекс источника. Этот регистр в цепочечных операциях содержит текущий адрес элемента в цепочке-источнике.
EDI/SI (Destination Index register) – индекс приемника. Этот регистр в цепочечных операциях содержит текущий адрес элемента в цепочке-приемнике.