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

Адресация ввода вывода

Для обращения к устройствам ввода вывода микропроцессор имеет отдельные команды INT и OUT, результат выполнения которых является формирование шинных сигналов IORD# и IOWR# для чтения или записи одного или двух байт. Данные при чтении могут помещаться только в регистр AL или AX и выводиться из этих же регистров. В циклах ввода вывода используются только 16 младших бит шины адреса (старшие биты при этом нулевые), что позволяет адресовать до 64Кбайт регистров ввода вывода. Адрес устройства задается либо в команде (только младший байт, а не старший нулевой), либо берется из регистра DX (полный шестнадцати битный адрес).

Инициализация прерывания останов и синхронизация микропроцессора

По сигналу RESET микропроцессор завершает текущий шинный цикл, а по снятии сигнала он в течении примерно семи циклов синхронизации начинает выполнение инструкции считываемой из памяти по адресу FFFF0h (сигнал RESET устанавливает сегментные регистры и указатель команд в состояние CS=FFFFh, IP=0, DS=SS=ES=0 и сбрасывает все флаги). Во время действия сигнала RESET все три стабильные буферные схемы переходят в высоко эмпедансное выключенное состояние. Прерывание (изменение текущей последовательности команд) по происхождению делятся на программные, внутренние прерывания микропроцессора и аппаратные (вызываемые электрическими сигналами на соответствующих входах микропроцессора). Микропроцессор может выполнить 256 типов (номеров) прерываний каждому из которых соответствует свой вектор прерывания - двойное слово содержащее дальний адрес (CS:IP) вызываемой подпрограммы (процедуры). Под векторы (указатели прерываний) в едином адресном пространстве памяти зарезервирована область от 0 до 3FFh. Программные прерывания, вызываемые исполнением команды INT_ _ по действиям микропроцессора аналогичны дальним вызовам подпрограмм (сохранение в стеке адреса возврата - регистров CS и IP - и передача управления по указанному адреса), но имеют некоторые отличия:

  • в начале выполнения прерывания микропроцессор помещает в стек регистр флагов и сбрасывает флаг разрешения прерывания IF;

  • вместо адреса вызываемой подпрограммы аргументом вызова является номер вектора прерывания (от 0 до 255);

  • по окончании выполнения процедуры по команде IRET микропроцессор извлекает из стека адрес возврата (команды следующей за командой INT) и сохраненное значение регистра флагов.

Сброс бита прерывания не позволяет прервать выполнение процедуры прерывания до ее окончания или явного разрешения командой EI. Само программное прерывание исполняется независимо от состояния флагаIF. Программные прерывания позволяют легко и быстро вызывать общеупотребительные процедуры (сервисыBIOSиDOS) из любого сегмента без применения дальних вызовов. ПрерываниеINT3традиционно используется в целях отладки программ для создания точки останова. В отличии от остальных программных прерываний оно вызывается однобайтной инструкцией.

Внутреннее прерывание возбуждается микропроцессором по особым условиям : прерывание 0 вырабатывается в случае переполнения при операции деления на 0; прерывание 1 вырабатывается после выполнения каждой команды при установленном флаге трассировки TF; прерывание 4 вырабатывается по командеINT 0если установлен флаг переполненияOF.

Аппаратные прерывания в отличии от программных и внутренних прерываний могут возникать асинхронно по отношению к исполняемой программе. Они делятся на маскируемые и немаскируемые. Микропроцессор может воспринимать прерывания после выполнения каждой команды, длинные строковые команды имеют для восприятия прерываний специальные окна.

Маскируемые прерывания вызываются переходом в высокий уровень сигнала на входе INTRи выполняются при установленном флаге IF. В этом случае микропроцессор сохраняет в стеке регистр флагов, сбрасывает флагIFи вырабатывает два следующих за другом цикла подтверждения прерывания в которых генерируются управляющие сигналыINTA#. Высокий уровень сигналаINTRдолжен сохранятся по крайней мере до подтверждения прерывания. Первый цикл подтверждения холостой, по второму импульсу внешний контроллер прерываний передает по шине данных байт, содержащий номер вектора обслуживающий данный тип аппаратного прерывания. Прерывания с полученным номером вектора выполняются микропроцессором так же как и программное. Обработка текущего прерывания может быть в свою очередь прервана не маскируемым прерыванием, а если обработчик устанавливает флагIF, то и другим маскируемым аппаратным прерываниям. После аппаратного сброса флагIFсброшен и маскируемые прерывания невозможны до их явного разрешения.

Немаскируемые прерывания выполняются независимо от состояния флага IFпо сигналуNMI. Высокий уровень на этом входе вызовет прерывания с типом (вектором) два, которые выполняются так же как и маскируемое. Его обработка не может прерваться под действием сигнала на входеNMIдо выполнения командыIRET. При вызове обработчика прерывания команды вызова процедуры следует помнить, что обработчик заканчивается командойIRET, а неRET FAR. КомандаIRETв отличие отRET FARпосле восстановления регистровCFиIPвытаскивает из стека и регистр флагов, поэтому последовательность команд вызова обработчика в этом случае должна быть такой

PUSH F

CALL FAR

Команда HALTпереводит микропроцессор в состояние останова из которого его может вывести только аппаратное прерывание или аппаратный сброс. В этом режиме микропроцессор не управляет локальной шиной (все три стабильные буферы отключены). КомандаWAITона заставляет микропроцессор ожидать активного (низкий уровень) на входеTEST#до появления активного сигнала микропроцессор так же не управляет локальной шиной. В случае аппаратного прерывания по окончании его обслуживания микропроцессор снова вернется в состояние ожидания. Проверка состояния входаTEST#используется для синхронизации с математическим сопроцессором 80x87. Интерфейс 80x86 допускает наличие на своей локальной шине других контроллеров, а так же позволяет строить многопроцессорные системы. Управление шиной может передаваться то микропроцессора другому контроллеру по соответствующему запросу. Для монополизации шины на время выполнения команды предусмотрен префикс LOCKзапрещающий микропроцессору отдавать управление шиной до окончания выполнения данной команды.

Набор команд Intel 80x86 включает следующие группы: команды пересылки данных, арифметические и логические команды, команды работы со строками, команды передачи управления, команды управления микропроцессором. Каждая команда имеет 1 или 2 байта кода команды за которыми может следовать 1, 2 или 4 байта операнда. Перед кодом команды возможно применение префиксов CS:, DS:, ES:, SS:,указывающих на использование заданных сегментных регистров вместо обычных префиксаREP, указывающего на необходимость повтора команды указанное в регистреСХчисло раз и префиксаLOCK, блокирующего системную шину на время выполнения команды. Система команд данного микропроцессора является подмножеством команд 32 разрядных микропроцессоров 80х86.

Соседние файлы в папке Лекции