Внутренняя организация МП семейства 80х86 в реальном режиме работы

В реальном режиме работы (например, под управлением MSDOS) любой из процессоров семейства 80х86 функционирует просто как 16-разрядный "быстрый" МП 8086, т.е. полностью соответствуют его программной модели.

Внутренние регистры МП

В состав МП входят следующие блоки регистров (табл. 5):

табл. 5

  CS сегмент кода  
  DS сегмент данных Сегментные
  SS сегмент стека Регистры
  ES дополнительный сегмент  
  IP указатель команд  
  SP указатель стека  
  BP указатель базы Регистры
  SI индексный регистр  
  DI индексный регистр Общего
AX AH AL аккумулятор  
BX BH BL указатель базы Назначения
CX CH CL счетчик  
DX DH DL расширитель аккумулятора  
  F регистр флагов  

· блок сегментных регистров. 4 сегментных регистра используются для хранения 16-и разрядных сегментных адресов начала сегмента.

· IP – 16-и разрядный регистр указателя команд, в котором хранится адрес смещения команды в кодовом сегменте.

· регистры общего назначения (РОН) могут использоваться для хранения любой информации. Но, как правило, РОН AX, BX, CX и DX используются в основном для хранения данных и допускают раздельное использование их байтов, а регистры SP,BP,SI,DI используются, в основном, для хранения адресной информации. Кроме того, каждый из РОН имеет специальные функции, которые используются по умолчанию в некоторых командах.

· регистр флагов (признаков) F содержит признаки последней выполненной АЛУ операции.

Организация памяти

Память представляет собой последовательность байтов, каждый из которых имеет 20-и разрядный физический адрес (исполнительный адрес) в диапазоне 00000-FFFFF. Все пространство памяти представляется как набор сегментов, определяемых программным путем. Размер каждого сегмента составляет 64К. В каждый момент времени в памяти имеется 4 сегмента: CS, SS, DS, ES. Эти сегменты могут не пересекаться, могут частично пересекаться, а если содержимое сегментных регистров одинаково, то они полностью совпадают.

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

FA = SR*16 + ЕА, где:

FA – физический адрес;

SR – содержимое текущего сегментного регистра;

ЕА – эффективный адрес.

рис. 1

Сегментный адрес хранится в одном из сегментных регистров (16 старших разрядов 20-ти разрядного адреса памяти). При вычислении физического адреса памяти к содержимому сегментного адреса дописываются нули. Поэтому начальные адреса сегментов всегда кратны 16.

Смещение в сегменте формируется процессором в зависимости от его режима работы. Если процессор выполняет выборку команд из памяти, то сегментный адрес берется из регистра CS, а смещение – из указателя команд IP (рис. 2). Во всех остальных случаях смещение формируется из содержимого РОН, индексных или базовых регистров. Способ вычисления смещения является способом адресации.

рис. 2

Внутрисегментный адрес называется смещением, если речь идет об аппаратных средствах. В системе команд в этом случае используется понятие эффективный адрес.

Для точного указания адреса в памяти используется логический адрес, который имеет следующий формат записи:

SR:EA; где SR – содержимое сегментного регистра; EA – эффективный адрес.

Например, пусть DS=2000H, EA=3100H. Тогда:

Логический адрес: 2000:3100

Физический адрес: 2000 0 + 3100 = 23100

Иногда объем памяти измеряется в параграфах (§): 1§ = 16 байт.

Система прерываний МП

Прерывание – это событие, которое прерывает нормальный ход выполнения программы (процесса).

МП 80х86 имеет эффективную систему прерываний, в которой каждому прерыванию поставлен в соответствие код (от 0 до 255), который идентифицирует тип прерывания. В системах с МП 8086 различают внешние и внутренние прерывания.

Внешние прерывания – это прерывания, обусловленные каким-либо внешним событием. Сигнал свершения этого события поступает на один из двух входов МП:

INTR – вход маскируемого запроса прерывания от внешних устройств;

NMI – вход немаскируемого запроса прерывания.

Для разрешения обслуживания внешних прерываний используется выход подтверждения прерывания .

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

· фиксирует запросы прерываний от внешних устройств;

· анализирует приоритеты поступивших прерываний;

· запрашивает у МП и, в случае подтверждения прерывания, выдает МП номер прерывания с наивысшим приоритетом.

При поступлении на один из входов ПКП IRQ0-IRQ7 запроса прерывания от внешнего устройства (рис. 3), ПКП фиксирует это прерывание, анализирует его приоритет и, если поступившее прерывание имеет наивысший в данный момент приоритет, выдает МП сигнал запроса прерывания INTR. При поступлении на вход INTR сигнала высокого уровня процессор заканчивает выполнение текущей команды и выдает сигнал подтверждения прерывания , который поступает на соответствующий вход ПКП. В ответ на этот сигнал ПКП процессору информации не передает. Затем процессор вырабатывает еще один сигнал , в ответ на который ПКП передает МП по шине данных байт, определяющий номер (тип) прерывания (0¸255). Этот номер однозначно связан с ПП обслуживания прерывания, на которую затем переходит процессор.

рис. 3

Прерывания по входу INTR можно разрешить или запретить(замаскировать), управляя состоянием флага I. Для этих целей имеются две специальные команды:

CLI – очистить флаг I=0 (запретить прерывания по входу INTR);

STI – установить флаг I=1 (разрешить прерывания по входу INTR).

Если пришел запрос прерывания, а прерывания были запрещены (I=0), то процессор не обслуживает этот запрос и не запоминает его.

Запрос прерывания по входу NMI является немаскируемым и программно его запретить нельзя. После появления сигнала на входе NMI процессор автоматически переходит к обслуживанию прерывания типа 2 (подтверждение прерывания при этом не требуется). Обычно сигнал запроса прерывания по входу NMI используют события, требующие немедленной обработки (например, аварийное отключение питания).

Запрос прерывания по входу NMI запоминается в МП и имеет более высокий приоритет, чем прерывания по входу INTR.

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

1. прерывание при ошибке деления на “0”. Возникает в том случае, если частное слишком велико или делитель = 0 (тип 0);

2. прерывание по переполнению. Выполняется по команде INTO при условии, что установлен флаг переполнения V=1 (тип 4);

3. прерывание при трассировке. Возникает по окончании команды, если установлен флаг трассировки Т=1 (тип 1);

4. прерывание типа 3. Возникает при выполнении однобайтной команды INT 3. Используется для установки контрольных точек разрыва при отладке программ.

5. программные прерывания при выполнении двухбайтных команд INTn (где n – номер прерывания). Программные прерывания на самом деле ничего не прерывают, а являются удобным средством для доступа к стандартным подпрограммам (функциям ОС).

Рассмотрим взаимосвязь между типом прерывания и п/пр обслуживания прерываний.

Таблица векторов прерываний

рис. 4

Для обслуживания прерываний в системах с МП 8086 используется таблица векторов прерываний объемом 1Кбайт, расположенная с нулевого адреса памяти (0...3FF). На каждый тип прерывания отводится 2 слова (4 байта) памяти, в которых хранится логический адрес п/пр обслуживания прерывания. Слово с большим адресом загружается в сегментный регистр CS, а с меньшим адресом – в регистр указателя команд IP. Таблица векторов прерываний имеет вид представленный на рис. 4.

Таким образом, получив номер типа прерывания, процессор умножает номер типа прерывания на 4 и получает адрес вектора прерывания. При переходе к п/пр обслуживания прерываний МП сохраняет в стеке содержимое CS,IP,F. Затем CS и IP загружаются новым содержимым из вектора прерываний. Возврат из п/пр осуществляется по команде IRET, которая восстанавливает содержимое регистров CS,IP,F из стека.