
- •Организация памяти.
- •Прграммная модель мп.
- •Ввод - вывод.
- •Внутренние операции мп.
- •Организация обмена с ву.
- •Прерывания.
- •Система команд и режимы адресации мп.
- •Программирование мп.
- •Команды передачи данных.
- •Команды арифметических операций.
- •Команды логических операций и сдвигов.
- •Команды передачи управления.
- •Команды управления мп.
- •Примеры программ.
- •Директивы.
- •Структура ассемблерной программы.
- •Пример оформления программы.
- •2. Порядок выполнения работы.
- •3.Варианты заданий:
- •Контрольные вопросы.
- •5 Содержание отчета.
- •6 Список литературы.
Прерывания.
Назначение системы прерываний - реагировать на определенные события переключением процессора с выполнения текущей программы на выполнение другой программы, обслуживающей соответствующую ситуацию с последующим возвратом к исходной программе так, будто прерывания и не было.
По источнику возникновения прерывания делятся на программные, внутренние прерывания процессора и аппаратные (внешние). Программные прерывания вызываются командой INT xx и позволяют легко вызывать общеупотребительные процедуры, например сервис DOS и BIOS. Внутренние прерывания генерирует сам МП при делении на ноль, переполнении и работе в пошаговом режиме. Аппаратные прерывания запрашиваются внешними устройствами и делятся на маскируемые (могут быть запрещены в процессоре) и немаскируемые (соответственно не могут быть запрещены в процессоре, но их источник может быть программно заблокирован во внешнем контроллере).
Им соответствуют два входа: NMI (NonMaskable Interrupt - немаскируемое прерывание) - используется для сигнализации МП о катастрофическом событии, требующем немедленной реакции, например, аварийном отключении питания, ошибке контроля четности в оперативной памяти или ПУ и др. и INTR (maskable INTeRrupt), на который подаются запросы на прерывание от ПУ через программируемый контроллер прерываний (ПКП) (т. к. вход один, а ПУ несколько). Более подробно работу ПКП рассмотрим позднее.
Каждому прерыванию соответствует свой номер, называемый вектором прерывания. Этот номер указывает на таблицу с адресами программ обработки прерываний. Таблица размещается в младших адресах памяти. Каждой программе в ней отводится два 16-разрядных слова, младшее из которых содержит смещение, а старшее - сегмент. Всего имеется 256 векторов.
Действия МП при получении сигнала INT (запрос внешнего маскируемого прерывания)
- МП завершает выполнение текущей команды (кроме цепочечных команд и WAIT, в течение которых запрос распознается) и проверяет флаг разрешения прерывания. Если прерывания разрешены, МП выдает сигнал подтверждения прерывания.
- ПУ, запросившее прерывание, передает в процессор по шине данных вектор прерывания.
- Процессор принимает вектор и использует его в качестве адреса (умножив на 4) для обращения к зоне оперативной памяти, содержащей значения сегмента и смещения адреса программы обработки прерывания (таблице векторов прерывания).
- Текущие значения сегмента, смещения, флагов и регистров, которые будут использоваться программой обработки запоминаются в стеке для восстановления прерванной программы, а вместо них заносятся выбранные из таблицы векторов значения и начинает выполняться программа обработки прерывания.
- Команда IRET, завершающая программу обработки прерывания, восстанавливает прежнее состояние МП.
При программных прерываниях не выполняются циклы подтверждения прерывания.
Прерывание также может быть прервано. Это т. н. «вложенные прерывания».
Система команд и режимы адресации мп.
Программная модель МП, дополненная реализованным АП памяти и конкретной конфигурацией портов ввода-вывода показывает, чем может располагать программист для разработки прикладной программы. Как можно распоряжаться этими ресурсами определяют система команд и режимы адресации МП.
Команда - это упорядоченная совокупность битов, представляющая код (наименование) задаваемой операции, и адреса операндов, участвующих в операции. Команда говорит МП что надо делать, а операнды - над чем. Длина команды в битах, число и расположение полей (групп битов) для кодирования элементов команды (операции, адресов и признаков) определяется форматом команды. Количество адресов в команде определяет ее адресность. Соответственно команды бывают нульадресные (безадресные), одно-, двух- и т.д. адресные. Имеются команды типа регистр - регистр, регистр - память, память - регистр, но нет память - память (кроме команды пересылки). В общем виде формат двухадресной (максимально) команды для I8086 имеет вид:
где первый байт содержит код операции COP, поле направления d (из регистра или в регистр), тип разрядности w (=1 команда оперирует словом, =1 - байтом). Второй (или постбайт) задает способ адресации, т. е. определяет участвующие в операции регистры или регистр и ячейку памяти. Состоит из трех полей md - режим, r/m - определяет первый операнд. Далее идут байты смещения disp L (H) и данных data L (H) [33]
По функциональному назначению команды можно разделить на следующие группы: передачи данных, арифметических операций, логических операций и сдвигов, передачи управления, цепочечные, управления микропроцессором.
Способ определения операнда называется режимом адресации. Эффективный адрес операнда может вычисляться как комбинация трех компонент: базы, индекса и смещения в команде. База - это содержимое одного из РОН, обычно BP или BX. База считается начальной точкой, а другие элементы прибавляются к ней для получения эффективного адреса. Индекс -это содержимое одного из регистров SI или DI. Смещение задается непосредственно в команде.
В соответствии с этим различают следующие режимы:
Непосредственный. Данное длиной 8 или 16 бит является частью команды. Например SUB AL,30h ;Вычесть из содержимого регистра AL число 48.
Прямой. 16-битный эффективный адрес операнда является частью команды. Например ADD TEMP, BL ;Прибавить содержимое BL к переменной TEMP (содержимому ячейки памяти с именем TEMP).
Регистровый. Данное содержится в заданном командой регистре МП. Например MOV AX, SI ;Передать содержимое ячейки SI в AX.
Косвенный регистровый. Эффективный адрес операнда находится в одном из индексных или базовых регистров. Например MOV DI, [DI] ;Переслать в DI содержимое ячейки памяти, адресуемой DI. JMP AX ; Перейти по адресу, заданному в регистре AX.
Базовый. Эффективный адрес операнда является суммой смещения и содержимого регистра BP или BX. Например MOV AX, [BP+10] ;Переслать в AX шестое слово массива, адресуемого BP. При использовании BX происходит обращение к операнду в текущем сегменте данных, а при использовании BP - в текущем сегменте стека. Основное применение связано с доступом к элементам структур данных, когда смещение (номер элемента) известно заранее, а базовый (начальный) адрес структуры должен вычисляться при выполнении программы.
Индексный. Эффективный адрес операнда вычисляется как сумма смещения, указанного в команде и содержимого индексного регистра SI или DI. Обычно используется для обращения к элементам одномерных массивов. Смещение задает начальный адрес, а значение в индексном регистре определяет нужный элемент. Например ADD CX, ROW[DI] ;Прибавить к CX элемент массива.
Базовый индексный. Эффективный адрес операнда равен сумме содержимого базового регистра, индексного регистра и смещения, указанного в команде. Например SUB [BX]GAMMA[DI], 1000 ;Используется при обращении к элементам матриц.
Относительный. Эффективный адрес вычисляется как сумма смещения в команде и текущего содержимого IP. Применяется только в командах перехода, вызовов подпрограмм и управления циклами.
Еще есть стековый режим адресации и адресация цепочек.
Т. к. эффективный адрес получается в результате некоторых вычислений, то время выполнения команды зависит от используемого режима адресации.