Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_ASVT_5-18_voprosy.doc
Скачиваний:
15
Добавлен:
15.04.2019
Размер:
249.34 Кб
Скачать

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

Для обращения к устройствам ввода вывода микропроцессор имеет отдельные команды 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) из любого сегмента без применения дальних вызовов. Прерывание INT 3 традиционно используется в целях отладки программ для создания точки останова. В отличии от остальных программных прерываний оно вызывается однобайтной инструкцией.

Внутреннее прерывание возбуждается микропроцессором по особым условиям : прерывание 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]