Решение.
MOV DX,ОЗFD ;DX := 3FD — адрес порта В ;
IN AL,DX. ; ввести в AL МП из порта В байт данных.
2) Вывод.
а) Ассемблер: OUT DX,AL; комментарий: вывести из регистра
AL МП байт данных в порт, адрес которого взять из DX.
б) машинный код состоит только из КОП: КОП = ЕЕ.
Пример применения этой команды можно не приводить, так как по
существу он не отличается от примера 1. Таким образом, выбор команд
ввода-вывода невелик, но достаточен.
13 Обслуживание прерываний. Контроллер прерываний
13.1 Процедура прерываний и команды прерываний
Что должен делать микропроцессор, обнаружив на своем входе INT
сигнал «1» (смотрите рисунок 3 в главе 2)? Он должен:
во-первых, закончить текущую команду, на которой его
«прихватил» запрос: INT = 1;
во-вторых, если флаг IF был равен «1» (разрешение аппаратного
прерывания), то вместо сигналов чтения -MEMRD или -IORD
микропроцессор вырабатывает сигнал чтения: -INTA.
Что должен прочитать МП этим сигналом с шины данных
системной магистрали? По логике событий — КОП следующей команды.
Но он вырабатывает не сигнал чтения ячейки ЗУ –MEMRD, а сигнал -
INTA. Вместе с тем, МП посредством этого сигнала будет загружать
КОП следующей команды, и это должна быть первая команда
подпрограммы, которая обслуживает прерывание. Следовательно,
источником этой команды должен быть необычный интерфейсный
элемент, для которого сигнал –INTA является сигналом чтения (ввода).
Вот этим элементом и является контроллер прерываний. Именно он
обслуживает аппаратную часть процедуры прерывания. Но прежде, чем
рассмотреть контроллер, давайте еще раз вернемся к процедуре
прерывания.
МП 8086 поддерживает (как и все другие микропроцессоры)
программное и аппаратное прерывание.
Программное прерывание инициируется по команде прерывания.
а) Ассемблер: INT n, где n — однобайтовый вектор перехода,
указывается в H-коде.
б) Машинный код — 2 байта: 1-й байт — КОП, 2-й байт — вектор.
КОП = CD. Вектор = 0...FF (0...255
10
).
Что делает микропроцессор, обнаружив команду INT n?
1) Запрещает дальнейшее аппаратное прерывание: IF = 0 (то есть,
выполняет скрытую команду CLI).
2) Загружает последовательно в стек:
69