- •Содержание
- •Перечень практических занятий
- •Предисловие Назначение методических указаний
- •Требования к знаниям и умениям при выполнении практических занятий
- •Правила выполнения практических занятий Общие положения
- •Оформление иллюстраций и таблиц
- •Уфимский государственный колледж радиоэлектроники журнал
- •Практическое занятие 1
- •2 Пояснение к работе
- •Практическое занятие 2
- •3 Задание
- •4 Контрольные вопросы
- •5 Содержание отчета
- •6 Список литературы
- •Практическое занятие 3
- •2 Пояснение к работе
- •3 Задание
- •4 Контрольные вопросы
- •5 Содержание отчета
- •6 Список литературы
- •Практическое занятие 4
- •2 Пояснение к работе
- •3 Задание
- •4 Контрольные вопросы
- •5 Содержание отчета
- •6 Список литературы
- •Практическое занятие 5
- •2 Пояснение к работе
- •3 Задание
- •4 Контрольные вопросы
- •5 Содержание отчета
- •6 Список литературы
- •Практическое занятие 6
- •2 Пояснение к работе
- •3 Задание
- •Практическое занятие 7
- •3 Задание
- •Практическое занятие 8
- •3 Задание
- •Практическое занятие 9
- •3 Задание
- •Практическое занятие 10
- •Практическое занятие 11
- •3 Задание
- •4 Контрольные вопросы
- •Практическое занятие 12
- •Практическое занятие 13
- •Практическое занятие 14
- •Практическое занятие 15
- •3 Задание
- •4 Контрольные вопросы
- •5 Содержание отчета
- •6 Список литературы
Практическое занятие 9
Изучение системы команд Ассемблера. Прерывания
1 Цель работы:
Изучить принцип работы с прерываниями.
2 Пояснение к работе
2.1 Краткие теоретические сведения
Существуют способы заставить ЦП прервать выполнение текущей программы и перейти к выполнению некой специальной подпрограммы, которая в данном случае называется подпрограммой обслуживания прерывания. После её завершения ЦП возвращается к прерванной программе и продолжает её выполнение.
За каждым прерыванием закрепляется его номер (например, 10h). В начальных адресах оперативной памяти располагается особая структура данных – таблица векторов прерываний (ТВП). Каждый вектор – это полный адрес начала подпрограммы обработки соответствующего прерывания, состоящий из адреса сегмента и смещения, занимающий 4 байта.
Получив команду вызова прерывания (например, INT 10h), ЦП сохраняет в стеке полный (CS, IP) адрес очередной команды в прерванной программе, затем там же сохраняет регистр FLAGS, сбрасывает флаги IF и TF, после чего обращается к ТВП и, основываясь на номере прерывания, извлекает из ТВП адрес подпрограммы обработки. Далее ЦП выполняет эту подпрограмму (и тем самым обслуживает прерывание), пока ему не встретится команда IRET (возврат из прерывания). По этой команде ЦП восстанавливает из стека сохранённый ранее адрес (а также и регистр FLAGS) и возвращается к продолжению прерванной программы.
Разница между обычным вызовом подпрограммы (командой CALL) и вызовом подпрограммы через механизм прерываний (командой INT) состоит в следующем. При пользовании командой CALL программист обязан знать адрес начала подпрограммы, в то время как при вызове прерывания знать этот адрес совершенно не нужно – нужен лишь номер соответствующего прерывания. Это удобно при вызове различных сервисов операционных систем (ОС). Ряд ОС, в том числе и MS-DOS-подсистема ОС Windows, содержат в себе большое количество стандартных подпрограмм обслуживания клавиатуры, мыши, дисплея, дисковых устройств, COM- и LPT-портов и т.д.
Команды RET (возврат из подпрограммы) и IRET выполняют различные действия и не являются взаимозаменяемыми.
Команда вызова программного прерывания имеет вид
INT <номер прерывания>,
где <номер прерывания> – число, обычно в шестнадцатеричное, в диапазоне 00h – 0FFh, определяющее адрес вызываемой резидентной программы.
Наибольшее число различных системных функций в MS-DOS сосредоточено в резидентной программе с номером прерывания 21h – диспетчер функций MS-DOS. В зависимости от значения, содержащегося при вызове прерывания в регистре АН, MS-DOS выполняет одну из нескольких десятков функций MS-DOS.
Для вызова функции прерывания DOS 21h необходимо проделать следующие действия:
- выбрать функцию, выполняющую требуемые действия;
- занести номер функции в регистр АН;
- подготовить другие регистры (если это необходимо);
- написать команду INT 21h;
- прочесть результаты или состояние из регистров, указанных в описании функции.
Таблица 9.1 – Описание функций прерывания 21h
Номер функции |
Описание |
Параметры вызова |
Возвращаемое значение |
01h |
Ввод с клавиатуры одного символа и отображение его на экране |
АН = 01h |
AL = код ASCII введенного символа |
02h |
Отображение символа на стандартный вывод (дисплей) |
АН = 02h DL = отображаемый символ |
нет |
05h |
Отображение символа на принтер Функция не возвращает ошибки состояния принтера. |
АН = 05h DL = символ для принтера |
нет |
07h и 08h |
Выполняет ввод с клавиатуры одного символа. Введенный символ не отображается на экране |
АН =07h или АН =08h |
AL = код ASCIL введенного символа |
09h |
Выполняет отображение строки на стандартный вывод. $ – признак конца строки (не отображается). |
АН = 09Н DS:DX = адрес отображаемой строки |
нет |
ОАh |
Выполняет ввод с клавиатуры в буфер строки символов. Символы при этом отображаются на экране. Символы вводятся один за другим, до тех пор, пока не будет введен код ODh (код клавиши Enter), завершающий строку. При вводе пользователь может редактировать строку |
АН = 0Ah DS:DX = адрес буфера ввода |
строка символов по указанному адресу |
Окончание таблицы 9.1 |
|||
0Bh |
Выполняет опрос состояния буфера клавиатуры. Устанавливает значение AL в зависимости от наличия символов в буфере клавиатуры. Часто используются в задачах, действующих при нажатии определенных клавиш. |
АН = 0Bh |
AL = 00h, если нет символа в буфере клавиатуры; AL = FFh, если есть символ в буфере клавиатуры. |