Регистры индекса, указателя и базы.
Как уже говорилось, физический адрес любого элемента внутри выбранного сегмента получается комбинацией адреса сегмента и смещения. Это смещение может находиться в любом из регистров индекса, указателя или базы.
Действия со стеком осуществляются с помощью селектора сегмента стека (SS) и пары регистров указателя стека [(E)SP] и указателя базы [(Е)ВР]. Смещения в сегментах данных (DS) и (ES) берутся из регистра базы [(Е)ВХ]. Более сложные действия над данными могут быть достигнуты при использовании пары регистров индекса источника [(E)SI] и индекса приемника [(E)DI] вместе с активным в данный момент сегментом данных.
Флаги
Микропроцессор 80386 содержит регистр EFLAGS с 13 полями флагов. Шесть флагов называются флагами состояния, они изменяются и дают необходимую информацию для управления арифметическими и логическими операциями. Флагами состояния являются: CF (флаг переноса), PF (флаг паритета), AF (вспомогательный флаг переноса), ZF (флаг нуля), SF (флаг знака), OF (флаг переполнения):
• флаг переноса (CF) устанавливается в единицу, когда при арифметической операции над 8- или 16-разрядным операндом происходит перенос или заем. В противном случае флаг сбрасывается в 0. Этот флаг используется также
. Регистры EFLAGS и EIP
при командах сдвига и циклического сдвига для значений разряда, "выходящего" из регистра;
• флаг паритета (PF) используется в основном при передаче данных. Он устанавливается в единицу для нечетного паритета или сбрасывается в 0 для четного;
• вспомогательный флаг переноса (AF) используется для двоично-десятич^ой арифметики. Он показывает, был ли перенос или заем в четырех младших цифрах двоично-десятичного числа; » флаг нуля (ZF) равен 1, когда арифметический результат равен нулю;
• флаг знака (SF) устанавливается в 1 при отрицательном арифметическом результате и сбрасывается в 0 при положительном результате;
• флаг переполнения (OF) показывает, был ли перенос старшего разряда результата без вырабатывания признака переноса соответствующего разряда.
Четыре из тринадцати флагов, называемые TF, IF, DF и VM, предназначены для прямых действий процессора. Например, установка флага ловушки (TF) переводит микропроцессор в одношаговый режим для отладки программ. Флаг разрешения прерывания (IF), будучи установлен в 1, разрешает внешние прерывания и при сбросе в 0 запрещает их. Направление цепочки операций контролируется флагом направления (DF). Когда DF сброшен в 0, значение регистра [(E)SI] или [(E)DI] автоматически увеличивается, если же DF установлен в 1, то [(E)SI] и [(E)DI] автоматически уменьшаются. Когда установлен флаг виртуального режима (VM), микропроцессор 80386 переходит из защищенного режима в виртуальный режим микропроцессора 8086. Флаг VM может быть установлен командой IRET или переключениями задач во время работы в защищенном режиме.
Специальные поля
Новые флаги IOPL, NT и RF используются микропроцессором только в защищенном режиме. Двухразрядный флаг уровня привилегии ввода-вывода (IOPL) служит для гарантии, что команда произведет только разрешенную операцию. Команды POPF и IRET выполняются на нулевом уровне привилегии, и переключения задач изменяют установку флага IOPL.
Флаг вложенной задачи (NT) показывает, является ли выполнение текущей задачи вложенным в выполнение другой задачи. Если NT установлен в 1,, это показывает, что текущая вложенная задача связана с предыдущей. Значение флага NT определяется управляющими передачами между точками задачи, прерываниями и ловушками. Флаг рестарта (RF) используется после ошибки при отладке, приведшей к прекращению работы программы. Флаг RF очищается, когда ошибочная команда "успешно" выполнена.
Указатель команды
Регистр указателя команды [(Е)1Р] содержит смещение, необходимое для адреса следующей команды внутри активного в данный момент сегмента кода. Это вырабатывает полный 32-разрядный указатель для следующей последовательной команды программы. Микропроцессор 80286 использует младшие 16 разрядов регистра EIP, называемые IP, в качестве указателя команды