Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1.docx
Скачиваний:
18
Добавлен:
22.11.2019
Размер:
330.52 Кб
Скачать

Модель памяти

Процессоры 8086 имеют сегментную организацию памя­ти, которая реализуется с помощью 4-х сегментных регистров CS, DS, SS и ES, с инфор­мационным объемом 16 бит каждый. Адресное пространство каждого сегмента равно 64 Кб. Роль программного счет­чика исполняет 16-ти разрядный регистр IР.

Сумматор адресов формирует так называемый физический адрес, который выставляется на магистраль адреса. Перечисленные выше сегментные регистры, сумматор адресов и схема управления шиной образуют интерфейсный блок.

Физический адрес ФА ячейки памяти формируется по правилу:

ФА = + смещение

где = сегмент10 * 16 = сегмент16 * 1016 = сегмент2 * 100002 физический адрес начала сегмента,

смещение - расстояние в байтах от начала сегмента до данной ячейки памяти.

Таким образом, диапазон адресного пространства МП 8086 простирается от значения 00000 до FFFFF, что составляет 220 бит = 1Мбайт.

Пример вычисления физического адреса показан на рис. 2, где адреса даны в шестнадцатеричной системе счисление.

Рис.2

Сумматор адресов вычисляет физический адрес таким образом:

Исполнительным адресом EA называется смещение в сегменте памяти, в котором находится операнд команды. Способ вычисления исполнительного адреса указывается в команде. Например:

MOV AX,[BX] – EA содержится в регистре BX,

MOV CX,[DI] - EA содержится в регистре DI,

MOV AX,[BX][SI] или MOV AX,[BX + SI] – EA равен сумме содержимых регистров BX и

SI,

MOV AX,[BX + SI + 24] – EA равен сумме содержимых регистров BX и SI плюс 24,

MOV BX,[0130] - EA равен 0130,

MOV [12EA],AL - EA равен 12EA

При регистровой адресации (например, MOV AX,BX) адреса регистров указываются в кодах команды. При непосредственной адресации (например, MOV AX,3A4F) операнд находится в очереди команд. Поэтому при регистровой и непосредственной адресации понятие исполнительного адреса не применяется.

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

Например, ниже приведен фрагмент программы на ассемблере, вызванной командой _U 0100 010F в “debug”.

13A7:0100 BB3A21 MOV BX,213A

13A7:0103 89D8 MOV AX,BX

13A7:0105 8B07 MOV AX,[BX]

13A7:0107 8B08 MOV CX,[BX+SI]

13A7:0109 894110 MOV [BX+DI+10],AX

13A7:010C A32001 MOV [0120],AX

13A7:010F 0000

Здесь CS = 13A7 – начальный адрес кодового сегмента (на разных компьютерах он будет различным).

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

Прерывание представляет собой операцию, которая приостанавливает выполнение программ для специальных системных действий. Прерывания делят на четыре типа, в зависимости от источника возникновения: 1. Внутренние прерывания процессора и сопроцессора (генерируются при возникновении особых условий выполнения текущей операции, например деление DIV, если делитель равен нулю). 2. Немаскируемые внешние прерывания (обрабатываются процессором независимо от состояния флага разрешения прерываний IF, например от устройств ISA или PCI). 3. Маскируемые внешние прерывания (например, прерывание от мыши, таймера, клавиатуры можно запретить или разрешить командами CLI, STI или сбросом - установкой флага IF). 4. Программно-вызываемые прерывания (в прямом смысле прерываниями не являются, поскольку представляют собой лишь специфический способ вызова процедур - не по адресу, а по номеру в таблице).

Внешние устройства передают сигнал внимания через контакт INTR в процессор. Процессор реагирует на этот запрос, если флаг прерывания IF установлен равным 1 (прерывание разрешено), и (в большинстве случаев) игнорирует запрос, если флаг IF установлен равным 0 (прерывание запрещено).

Операнд в команде прерывания, например INT 12h, содержит номер прерывания, который идентифицирует запрос. Для каждого номера система содержит адрес в таблице векторов прерываний, начинающейся по адресу 0000:0000. Она занимает первые 1024 байта памяти от 0 до 3ffh. Каждый элемент таблицы указывает на подпрограмму обработки указанного типа прерывания и содержит адрес кодового сегмента и смещение, которые при прерывании устанавливаются в регистры CS и IP соответственно. Процедуры прерываний содержатся в BIOS (0 – 1Fh) и в DOS (INT 20h и более).