4891

Аппаратное и программное прерывание

Практическая работа

Информатика, кибернетика и программирование

Прерывания Команды прерывания Различают два вида прерываний – аппаратные прерывания и программные прерывания. Аппаратное прерывание – это сигнал от любого устройства системы для процессора, который по этому сигналу должен обслужить д...

Русский

2012-11-28

75.5 KB

48 чел.

Прерывания

  1.  Команды прерывания

Различают два вида прерываний – аппаратные прерывания и программные прерывания. Аппаратное прерывание – это сигнал от любого устройства системы для процессора, который по этому сигналу должен обслужить данное устройство. Программное прерывание создается программами BIOS или DOS для вызова сервисных подпрограмм. Программное прерывание вырабатывается специальной микросхемой – контроллером прерываний, который посылает сигнал процессору на приостановку выполнения текущей программы и переход к выполнению программы прерывания.

Команды прерывания позволяют вызывать процедуры обслуживания прерываний из программ так же как это сделало бы устройство. Программные прерывания имитируют действие аппаратных прерываний.

INT (тип прерывания)

Команда INT (прерывание) инициирует выполнение процедуры обработки прерывания, определенного в операнде "тип прерывания". Эта команда сохраняет в стеке регистр флагов, очищает флаги TF и IF для запрещения пошагового выполнения и маскируемых прерываний. Флаги сохраняются в том же формате, что и в команде PUSHF. Затем в стеке сохраняется текущее содержимое регистра сегмента кода CS, вычисляется адрес вектора прерывания путем умножения "типа прерывания" на четыре, и второе слово этого вектора помещается в регистр сегмента кода CS. Далее в стеке сохраняется текущее содержимое счетчика команд IP, и в этот регистр записывается первое слово вычисленного вектора прерывания.

Рисунок 15 Вызов обработчика прерывания

INTO

Команда INTO (прерывание при переполнении) генерирует программное прерывание, если установлен флаг переполнения (OF), в противном случае управление передается следующей команде. Вектор прерывания INTO расположен по адресу 10h. Действие этой команды аналогично действию команды INT.

IRET

Команда IRET (возврат из прерывания) возвращает управление в точку, откуда прерывание было вызвано, заполняя из стека регистры IP, CS и регистр флагов. Команда IRET используется для выхода из процедур обработки как программных, так и аппаратных прерываний.

При написании программ для 16-разрядного режима можно использовать прерывание int 21h, предназначенное для вызова функций DOS. Существует около 90 различных функций. Номер функции предварительно помещается в регистр AH. Каждая функция использует входные параметры, передающиеся через регистры, которые должны быть проинициализированы перед вызовом прерывания int 21h. Рассмотрим несколько групп функций DOS: функции ввода, функции вывода, функции даты и времени.

  1.  Функции вывода

Рассмотрим некоторые функции DOS, которые используются для вывода символьной информации на экран. Далее указывается номер функции и описание функции с примером использования. Средства DOS позволяют выводить на экран только черно-белый текст, возможности позиционирования текста на экране ограничиваются использованием символов возврата каретки (0Dh) и перевода строки (0Ah).

Вывод символа (02h)

Функция посылает символ на стандартное устройство вывода. В регистр DL помещается выводимый символ. Регистр AL модифицируется системой DOS. Если в процессе вывода символа на экран с клавиатуры поступает код <CTRL>-C, срабатывает стандартная процедура обработки этого прерывания и вывод прекращается (как и программа в целом)

Пример.

mov AH, 2h ;Выбор функции 2

mov DL,’*’ ;Отображаемый символ

int 21h  ;Вызов DOS для исполнения

Прямой вывод (06h)

Функция может читать из стандартного входного устройства или выводить на стандартное устройство, при этом исключает стандартная реакция системы на ввод <CTRL>-C. В случае вывода код ASCII передаваемого символа засылается в регистр DL, при вводе DL=FFh.

Пример.

mov AH, 6h ;Выбор функции 6

mov DL,’*’ ;Отображаемый символ

int 21h  ;Вызов DOS для исполнения

Вывод строки (09h)

Функция передает строку символов на стандартное устройство вывода. В регистр DX помещается смещение строки. Строка должна оканчиваться символом доллара ($). Управляющие символы (табуляция, возврат каретки) распознаются системой DOS. Если в процессе вывода сообщения на экран с клавиатуры поступает код <CTRL>-C, срабатывает стандартная процедура обработки этого прерывания и вывод прекращается (как и программа в целом)

Пример.

mov AH, 9h   ;Выбор функции 9

mov DX,offset string ;Адрес строки

int 21h    ;Вызов DOS

.DATA

string DB ‘Строка 1’,0dh,0Ah,’$’

  1.  Функции ввода

Рассмотрим некоторые функции DOS, которые используются для ввода символьной информации с клавиатуры. Далее указывается номер функции и описание функции с примером использования.

Фильтрующий ввод с дублированием на экране (01h)

Функция ожидает, пока символ будет считан с устройства ввода, посылает символ на стандартный выход (дисплей) и сохраняет его в регистре AL. Если символ уже находится в буфере клавиатуры, то оно сразу пересылается в регистр AL. Пользователь может прекратить ввод нажатием комбинации клавиш CTRL+Break.

Пример.

mov AH, 1h   ;Выбор функции 1

int 21h    ;Вызов DOS

mov char, AL   ;Сохранение символа

Прямой ввод без ожидания (06h)

Функция не ожидает поступления очередного символа, а сама обращается в стандартному входному буферу за следующим символом. Комбинация клавиш CTRL+Break неактивна. Перед вызовом прерывания в регистр DL необходимо поместить значение 0FFh. Если обнаружен символ во входном буфере, то он перемещается в регистр AL и флаг ZF сбрасывается. Если символ не обнаружен, то ZF=1.

Пример.

mov AH, 6h   ;Выбор функции 6

mov DL, 0FFh   

int 21h    ;Вызов DOS

Прямой ввод с неактивной CTRL+Break (07h)

Функция ожидает нефильтрованный символ со стандартного входа без эхо-символа. Комбинация клавиш CTRL+Break неактивна. Регистр AL содержит вводимый символ.

Пример.

mov AH, 7h   ;Выбор функции 7

int 21h    ;Вызов DOS

Прямой ввод с активной CTRL+Break (08h)

Функция ожидает нефильтрованный символ со стандартного входа без эхо-символа. Комбинация клавиш CTRL+Break активна. Регистр AL содержит вводимый символ.

Буферизованный ввод (0Аh)

Функция 0Аh считывает строку символов размером до 255 символов со стандартного входа и сохраняет ее в буфере. Клавиша <BackSpace> может использоваться для стирания символов и возврата курсора. Пользователь может прервать ввод нажатием клавиши <Enter>. Все вводимые символы отображаются на экране. Не пропускаются нажатие клавиш, которые не создают символы ASCII. Байт со смещением 0 содержит максимальное число символов, которое можно ввести, включая клавишу <Enter>. В байте со смещением 1 сохраняется количество введенных символов. Сами символы будут размещены в буфере со смещением 2.

Пример.

.DATA

keyboard LABEL BYTE

maxkeys DB 32

charsinput DB ?

buffer DB 32 dup (0)

.CODE

mov DX,offset keyboard

mov AH, 0Ah  ;Выбор ввода с консоли

int 21h   ;Вызов DOS

Получение статуса ввода (0Вh)

Функция 0Вh проверяет стандартный буфер ввода на наличие в нем символов. Если есть символ, то регистр AL=0FFh, в противном случае AL=0.

Пример.

mov AH, 0Вh  ;Проверка статуса ввода

int 21h   ;Вызов DOS

Чтение из файла или входного устройства (3Fh)

Функция может использоваться для чтения строки символов из файла или входного устройства. Регистр DX содержит смещение входного буфера, размер которого больше или равен значению величины, помещенной в регистр СХ. Регистр ВХ определяет стандартное входное устройство или индекс файла. Для стандартной клавиатуры значение регистра ВХ=0. В регистре СХ находится значение максимального количества байтов для чтения. В регистре АХ возвращается число реально считанных символов. Функция может считывать символы и прекращает работу при нажатии клавиши <Enter>.

Пример.

.DATA

buffer DB 127 dup (0)

.CODE

mov AH, 3Fh  ;Чтение из файла/консоли

mov BX,0

mov CX,127

mov DX,offset buffer

int 21h   ;Вызов DOS

Клавиши, не имеющие соответствующего кода ASCII, называются управляющими клавишами. В их число входят клавиши перемещения курсора, клавиши <PgUp>, <PgDown>, <Home>, <End> и другие. При нажатии управляющей клавиши первым символом, помещаемым во входной буфер, будет 00h. Чтобы получить скан-код нажатой клавиши, необходимо получить из буфера еще один символ.

Пример 1.

mov AH, 07h  ;Функция ввода с консоли

int 21h   ;Вызов DOS, AL=0

int 21h   ;AL содержит скан-код

mov scan, AL

Пример 2. Ожидание ввода пробела

loop1: mov ah,7 ; нефильтр. ввод без эха

int 21h

cmp al,' ' ; Пробел ?

jnz loop1 ; Нет !

  1.  Функции DOS даты/ времени

Рассмотрим функции DOS для работы с датами и временем.

Получение даты (2Аh)

Функция возвращает текущую системную дату, помещая год в регистр СХ, а номер месяца – в регистр DH. Номер дня помещается в регистр DL, а день недели – в регистр AL. Для дней недели используются числовые обозначения: 0 – воскресенье, 1 – понедельник и т.д.

Пример.

mov AH, 2Аh  

int 21h   

mov year, CX

mov month, DH

mov day, DL

mov dayofweek, AL

Установка даты (2Вh)

Функция устанавливает текущую системную дату, используя те же регистры, что и для функции 2Ah. Функция возвращает значение 0 в регистр AL, если изменение прошло успешно, или значение 0FFh, если данные не были изменены.

Пример.

mov AH, 2Вh  

mov CX, year

mov DH, month

mov DL, day

mov AL, dayofweek

int 21h   

cmp AL, 0

jne baddate

Получение времени (2Сh)

Функция возвращает текущее системное время, помещая часы в регистр CH, минуты – в регистр CL, секунды – в DH и сотые доли секунд – в DL.

Пример.

mov AH, 2Сh  

int 21h   

mov hours, CH

mov minutes, CL

mov seconds, DH

Установка времени (2Dh)

Функция устанавливает текущее системное время, используя те же регистры, что и для функции 2Сh. Функция возвращает значение 0 в регистр AL, если изменение прошло успешно, или значение 0FFh, если данные не были изменены.

Пример.

mov AH, 2Dh  

mov CH, hours

mov CL, minutes

mov DH, seconds

int 21h

cmp AL, 0

jne badtime

  1.  Ввод и вывод числовой информации

Арифметические команды могут обрабатывать четыре типа чисел – беззнаковые двоичные, знаковые двоичные, беззнаковые упакованные десятичные и беззнаковые неупакованные десятичные. Двоичные числа могут быть 8- и 16-разрядными. Десятичные упакованные числа содержат в байте две цифры, неупакованные – одну.

Упакованные десятичные числа содержат в каждом байте две десятичных (0 – 9) цифры. В старшем полубайте содержится старшая значащая цифра, в младшем – младшая. Каждая десятичная цифра представляется в двоичном (или, что то же самое, в шестнадцатеричном) коде. Диапазон представления упакованных десятичных чисел в байте 0 – 99. Сложение и вычитание упакованных десятичных чисел осуществляется в два этапа.

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

Неупакованные десятичные числа содержат в байте одну десятичную цифру в младших четырех разрядах. Старшие четыре разряда должны быть нулями. Ниже приведена арифметическая интерпретация 8-разрядных двоичных чисел.

Таблица 10

Шестнадца-теричный код

Двоичный код

Беззнаковое двоичное

Знаковое двоичное

Неупакован-ное десятичное

Упакован-ное десятичное

07

00000111

7

+7

7

7

89

10001001

137

-119

недействит.

89

С5

11000101

197

-59

недействит.

недействит.

Неупакованное десятичное число легко может быть преобразовано в ASCII-представление соответствующей цифры. Для этого в старший байт неупакованного десятичного числа следует поместить значение 3.

Рассмотрим команды для работы с этими форматами чисел.

ААА

Команда ААА (коррекция сложения неупакованных десятичных чисел) приводит содержимое регистра AL к виду правильного неупакованного десятичного числа, старший полубайт при этом обнуляется. Команда ААА изменяет значение флагов FC и AC; содержимое флагов OF, PF, SF и ZF после выполнения команды ААА неопределено.

Пример.

mov AX, 0605h ;неупакованное десятичное 65

add AL, 09h ;AХ=060Eh

aaa   ;AX=0704h

DAA

Команда DAA (десятичная коррекция сложения) приводит содержимое регистра AL к виду правильного упакованного десятичного числа после предшествующей команды сложения. Команда DAA изменяет значение флагов AF, CF, PF, SF и ZF; содержимое флага OF после выполнения команды DAA не определено.

Пример.

mov AL, 87h ;упакованное десятичное 87

add AL, 04h ;AL=88h

daa   ;AX=91h

AAS

Команда AAS (коррекция вычитания неупакованных десятичных чисел) корректирует результат предшествующего вычитания двух правильных неупакованных десятичных чисел. Операндом назначения в команде вычитания должен быть регистр AL. Команда AAS приводит значение в AL к виду правильного неупакованного десятичного числа; старший полубайт при этом обнуляется. AAS воздействует на флаги AF и CF; Значение флагов OF, PF, SF и ZF после выполнения команды AAS не определено.

DAS

Команда DAS (десятичная коррекция вычитания) корректирует результат предшествующего вычитания двух правильных неупакованных десятичных чисел. Операндом назначения в команде вычитания должен быть регистр AL. Команда DAS приводит значение в AL к виду двух правильных упакованных десятичных чисел. Команда DAS воздействует на флаги AF и CF. Значение флагов OF, PF, SF и ZF после выполнения команды DAS не определено.

ААМ

Команда ААМ (коррекция умножения неупакованных десятичных чисел) приводит результат предшествующего умножения к двум правильным неупакованным десятичным цифрам. Для получения правильного результата после выполнения коррекции старшие полубайты умножаемых операндов должны быть нулевыми, а младшие должны быть правильными двоично-десятичными цифрами.

Команда ААМ воздействует на флаги PF, SF и ZF. Содержимое флагов AF, CF и OF после выполнения команды ААМ неопределено.

AAD

Команда AAD (коррекция деления неупакованных десятичных чисел) модифицирует содержимое регистра AL перед выполнение деления так, чтобы при выполнении деления в частном получилось правильное неупакованное десятичное число. Для получения правильного результата после выполнения деления содержимое регистра AH должно быть нулевым. Команда ААD воздействует на флаги PF, SF и ZF. Содержимое флагов AF, CF и OF после выполнения команды ААD неопределено.

Пример 1. Вывод неупакованного десятичного числа на экран

mov AX, 0605h ;неупакованное десятичное 65

add AL, 09h ;AХ=060Eh

aaa   ;AX=0704h

or AX, 3030h

mov DL,AH ;Отображаемый символ

push AX

mov AH, 6h ;Выбор функции 6

int 21h  ;Вызов DOS для исполнения

pop AX

mov DL,AL ;Отображаемый символ

mov AH, 6h ;Выбор функции 6

int 21h  ;Вызов DOS для исполнения

Пример 2. Вывод упакованного десятичного числа на экран

mov AL, 65h ;упакованное десятичное 65

add AL, 09h ;

daa   ;AL=74h

push AX

sar AL, 4

or AL,30h

mov DL,AL ;Отображаемый символ

mov AH, 6h ;Выбор функции 6

int 21h  ;Вызов DOS для исполнения

pop AX

and AL,04h

or AL, 30h

mov DL,AL ;Отображаемый символ

mov AH, 6h ;Выбор функции 6

int 21h  ;Вызов DOS для исполнения


mov AX,3

int 21h

mov BX,AX

ti

iret

Вызывающая программа

Память

Обработчик

прерывания


 

А также другие работы, которые могут Вас заинтересовать

34931. Закон Оукена. Экономический смысл. Социально-экономические последствия безработицы 33 KB
  Социальноэкономические последствия безработицы. Закон Оукена эмпирическая зависимость между темпом роста безработицы и темпом роста ВНП в США начала 60х годов предполагающая что превышение уровня безработицы на 1 над уровнем естественной безработицы снижает реальный ВНП по сравнению с потенциальным на 25 . Y − Y Y = − Buc Y фактический ВНП Y потенциальный ВНП uc уровень циклической безработицы B эмпирический коэффициент чувствительности обычно принимается 2. Следствие из закона Оукена: Y1 − Y0 Y0 =...
34932. Законы Госсена и аксиомы порядкового подхода 42.5 KB
  Субъект будет распределять свои расходы таким образом что отношение предельной полезности к цене будет одинаковым для всех товаров и экономических услуг: U полезность xi количество iго товара или услуги pi цена iго товара или услуги Порядковый подход к анализу полезности и спроса базируется на следующих аксиомах: Аксиома полной совершенной упорядоченности. Аксиома транзитивности. Эта аксиома гарантирует согласованность предпочтений. Аксиома транзитивности содержит и еще одно утверждение а именно: если А В и В С то А С.
34933. Индексы цен 27.5 KB
  Методика принципов расчета индексов цен: определение набора товаров; выбор базовых объектов путем репрезентативной выборки предприятий различных отраслей торговли сферы услуг; выбор системы взвешивания показателей и формулы расчета индексов. Расчеты индексов цен обеспечивают построение индексов фактических цен и индексов средних цен. Индекс средних цен учитывает наряду с изменением цен на отдельные товары структурные изменения.
34934. Инфляция, причины и показатели 30 KB
  Инфляция – это повышение общего уровня цен сопровождающееся обесцениванием денежной единицы. Открытая инфляция это форма инфляции проявляющаяся в повышении общего уровня цен характерная для рыночной экономики. Скрытая латентная инфляция это форма инфляции которая проявляется не в повышении цен а в хроническом дефиците товаров и услуг развитии теневой экономики карточном распределении товаров росте вынужденных денежных сбережений.
34935. Классификации экономических циклов 27 KB
  Второй тип среднесрочные циклы продолжительностью 10 20 лет. В качестве причин средних циклов одни экономисты называли кредитную сферу Жугляр а также периодическое обновление производственных сооружений и жилья так называемые строительные циклы Кузнеца. Третий тип долгосрочные циклы большие экономические циклы Кондратьева продолжительностью 4855 лет.
34936. Классификация фирм 37 KB
  По цели деятельности фирмы бывают: коммерческая (цель – получение прибыли), некоммерческая(основная цель – социальная, получение прибыли не является основной целью)
34937. Коммерческие банки и их основные операции 26 KB
  Коммерческие банки выполняют следующие основные операции функции: 1. Собственные операции – это фондовые операции банка с ценными бумагами т. Осуществление коммерческими банками операции подразделяются на пассивные и активные.
34938. Кредит и его формы 28 KB
  Кредитные отношения могут выражаться в разных формах кредита коммерческий кредит банковский кредит и др. Другие определения кредита: взаимоотношения между кредитором и заёмщиком; возвратное движение стоимости; движение платежных средств на началах возвратности; движение ссуженной стоимости; движение ссудного капитала; размещение и использование ресурсов на началах возвратности; предоставление настоящих денег взамен будущих денег и др. Формы кредита: На рынке реализуются две основные формы кредита: коммерческий и банковский....
34939. Макроэкономическое равновесие в трактовке классической и неокейсианской школ 31 KB
  Макроэкономическое равновесие в трактовке классической и неокейсианской школ Описывает поведение экономики Классическая школа: в долговой период Кейсианская: в краткосрочный Рассматривает условия Кля: для совершенной конкуренции Кейя: для несовершенной конкуренции Исходит из того что Кля: совокупный спрос = совокупному предложению т. Кейя: экономика может находиться в равновесии даже при неоптимальном использовании ресурсов. Экономика функционирует в условиях Кля: полной занятости всех ресурсов Кейя: недозагрузки. Рост экономики...