Прерывания
Прерывания можно рассматривать как номер функции. Эти функции делают программирование
более легким - вместо написания кода путем печатания символов вы можете
просто вызвать прерывание и оно все сделает за вас. Существуют также
функции прерываний, которые работают с дисками и другим "железом". Мы
называем такие функции
программными прерываниями.
Прерывания могут быть также вызваны различными устройствами. Такие прерывания
называются
аппаратными прерываниями. Но сейчас нас интересуют
только
программные прерывания.
Чтобы выполнить
программное прерывание, используют команду
INT, которая имеет очень простой синтаксис:
INT значение
Где
значение может быть числом в диапазоне от 0 до 255 (или от 0
до 0FFh), обычно мы будем использовать шестнадцатиричные числа.
Вы можете подумать, что имеются только 256 функций, но это не так. Каждое
прерывание может иметь подфункции.
Чтобы определить подфункцию, в регистр
AH нужно записать ее номер
перед вызовом прерывания. Каждое прерывание может иметь до 256
подфункций (таким образом мы получаем
256 * 256 = 65536 функций).
В основном используется регистр
AH, но иногда могут использоваться и
другие регистры. Обычно другие регистры используются для записи параметров
и данных подфункции.
Следующий пример использует прерывание
INT 10h и подфункцию
0Eh, чтобы
напечатать сообщение "Hello!". Эта функция выводит символ на экран, перемещая
курсор и прокручивая экран по необходимости.
#MAKE_COM# ; инструкция компилятора для создания СОМ-файла.
ORG 100h
; Подфункция, которую мы используем
; не изменяет регистр АН после завершения,
; так что мы можем использовать его только один раз
MOV AH, 0Eh ; выбор подфункции.
; Подфункция INT 10h / 0Eh принимает
; в качестве параметра ASCII-код символа,
; который нужно записывать в регистр AL.
MOV AL, 'H' ; ASCII-код: 72
INT 10h ; напечатать его!
MOV AL, 'e' ; ASCII-код: 101
INT 10h ; напечатать его!
MOV AL, 'l' ; ASCII-код: 108
INT 10h ; напечатать его!
MOV AL, 'l' ; ASCII-код: 108
INT 10h ; напечатать его!
MOV AL, 'o' ; ASCII-код: 111
INT 10h ; напечатать его!
MOV AL, '!' ; ASCII-код: 33
INT 10h ; напечатать его!
RET ; вернуться в операционную систему.
|
Скопируйте и вставьте эту программу в редактор кода
Emu8086
и нажмите кнопку [
Compile and Emulate]. Запустите ее!
См.
список поддерживаемых прерываний
для более подробной информации о прерываниях.
<<< Предыдущая часть <<<
>>> Следующая часть >>>