Использование регистра IP (EIP) в процессорах INTEL связано с использованием конвейера команд, расположенного в устройстве интерфейса шины, в который помещаются несколько последовательно расположенных байтов памяти, извлекаемых из сегментов кода. Это выполняется независимо от процесса выполнения текущей команды в операционном блоке и, как правило, обеспечивает чтение следующей команды не из памяти, а непосредственно с конвейера, что значительно быстрее и позволяет повысить быстродействие микропроцессора. Работа микропроцессора замедляется, если в конвейере не окажется предварительно выбранной команды, что возможно, например, при появлении команды перехода.
Регистры сегментов содержат селекторы сегментов, соответствующие различным формам доступа к памяти (о формах доступа к памяти см. ниже). Специальные сегментные регистры определяют доступ к сегменту кода и сегменту стека, доступным в каждый момент выполнения программы, а также доступные в программе сегменты данных, которых в каждый момент времени может быть использовано несколько (до трех различных сегментов).
Регистр сегмента стека (SS) всегда содержит адрес размещения стека в Оперативной Памяти (ОЗУ). Размер стека не может превышать 4ГБ, что соответствует максимальному размеру сегмента в оперативной памяти для процессора i486 и более высоких моделей. В каждый момент времени программе доступен лишь один сегмент стека.
Регистр указателя стека (ESP) содержит относительный адрес вершины стека в текущем сегменте стека. Его значение используется командами POP и PUSH, при вызове подпрограмм и при возврате, исключениями и прерываниями. При занесении элемента в стек, процессор уменьшает значение регистра ESP, а затем записывает элемент по адресу новой вершины. При извлечении данных из стека, процессор копирует элемент, расположенный по адресу вершины, а затем увеличивает значение регистра указателя стека. Иными словами, стек растет вниз, в сторону уменьшения адресов.
Регистр указателя базы кадра стека (EBP), как правило, используется для доступа к структурам данных, содержащимся в стеке. Например, при входе в подпрограмму, стек содержит адрес возврата и некоторое число параметров, передаваемых в данную подпрограмму. Подпрограмма, при необходимости создания временных локальных переменных, использует стек, что приводит к изменению указателя стека по мере занесения и удаления данных в стеке. Если перед началом выполнения операций со стеком указатель копируется в базовый указатель кадра стека, последний может быть использован для доступа к данным, имеющим фиксированное смещение в сегменте стека. Если этого не делать, доступ к структурам данных, имеющим фиксированное смещение, может быть утерян в процессе занесения в стек и удаления из стека временных переменных. При использовании регистра EBP (BP) для хранения адреса памяти, текущий сегмент обязательно должен быть выбран (установлен регистр SS). Т.к. нет необходимости указывать сегмент стека в каждой команде, их кодирование становится более компактным. Регистр EBP (BP) может также использоваться для адресации других сегментов. Такие команды как ENTER и LEAVE предусматривают автоматическое использование регистра EBP (BP) для обеспечения удобного доступа к переменным.
Содержимое регистров флагов представлено в следующей таблице
№ бита |
Название флага |
Назначение |
0 |
CF – Carry Flag |
Флаг Переноса, устанавливается в единицу, если результат математической операции не помещается в отведенное для него место или если при выполнении операции требуется заем. Этот бит устанавливается также в командах сдвига. |
1 |
1 |
Всегда равен 1. |
2 |
PF – Parity Flag |
Флаг Четности равен 1, если результат операции – число с четным числом бит, 0 – в противном случае. |
3 |
0 |
При нормальной работе машины всегда равен 0. |
4 |
AF – Auxiliary Carry Flag |
Флаг Дополнительного Переноса равен 1, если произошел перенос или заем для третьего бита результата. Он автоматически используется в командах коррекции результата при операциях двоично-десятичной арифметики. |
5 |
0 |
При правильной работе оборудования всегда равен нулю. |
6 |
ZF – Zero Flag |
Флаг Нуля равен 1, если результат операции равен нулю, и равен 1, если результат не нулевой. |
7 |
SF – Sign Flag |
Флаг Знака дублирует самого старшего бита результата. Этот бит равен нулю для положительных чисел и 1 для отрицательных чисел. |
8 |
TF – Trap Flag |
Флаг Трассировки используется при работе отладчиков (debugger). Установка этого флага в 1 приводит к автоматическому формированию специальной команды прерывания и к переходу по фиксированному адресу, где находится програма отладчика. |
9 |
IF – Interrupt Flag |
Флаг разрешения Прерывания определяет, можно ли прервать ход выполнения программы в ответ на запрос прерывания от внешнего устройства. Если этот флаг равен 1, такие прерывания разрешены, в противном случае этот флаг равен 0.STI устанавливает IF в 1. CLI устанавливает IF в 0. |
10 |
DF – Destination Flag |
Флаг Направления используется в командах работы со строками и показывает, как будут автоматически изменяться содержимое индексных регистров SI и DI. Если этот флаг равен 0, содержимое будет увеличиваться, (строка обрабатывается слева направо), если он равен 1, то содержимое регистров будет уменьшаться, (строка обрабатывается справа налево). Команда STD устанавливает DF в 1. Команда CLDустанавливает DF в 0. |
11 |
OF – Overflow Flag |
Флаг Переполнения используется как индикатор переполнения при работе с числами со знаком. Он равен 1, если результат операции над числами со знаком выйдет за пределы допустимого диапазона результата, и равен 0 в противном случае. |
12 - 13 |
IP - OL |
Уровень привилегий ввода/вывода. |
14 |
NT |
Флаг вложенной задачи. |
15 |
0 |
При правильной работе машины всегда равен нулю. |
16 |
RF |
Флаг возобновления. |
17 |
VM |
Режим виртуального процессора i8086 |
18 |
AC |
Проверка выравнивания. |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.