Основы организации низкоуровневого ввода\вывода информации
УРОВНИ ВВОДА\ВЫВОДА
1. Аппаратный. Обмен данными между процессором и устройствами происходит через порты
2. Программный. Уровень операционной системы. Не зависит от технических характеристик портов конкретной модели ПК.
3. Уровень приложений. Инвариантен к любой вычислительной платформе. Уровень работы в сети.
ПРОГРАММНЫЙ УРОВЕНЬ ВВОДА\ВЫВОДА
Этот уровень управляется ОС которая обеспечивает взаимодействие программы пользователя с устройствами ввода\вывода, а также файловыми системами и другими программами пользователя. Полную свободу доступа к оперативной памяти, устройствам и портам обеспечивает состояние компьютера в момент его загрузки. В основе программного ввода\вывода лежит понятие прерывания (interrupt). Прерывания обрабатываются обработчиками прерываний(ISR). В asm вызов обработчика прерывания происходит по команде int.
КОМАНДЫ ОБРАБОТКИ ПРЕРЫВАНИЙ (INTx)
Любая операция в\в осуществляется определенной подпрограммой обработки прерываний. вызов подпрограммы осуществляется командами:
· INTO. Эта команда представляется следующей логикой работы:
o Если OF=0 то никакие действия не производить и продолжать действия программы. Если OF=1 то необходимо инициировать команду "INT 4"
· INT НОМЕР_ПРЕРЫВАНИЯ
1. Записать в стек регистр флагов (FLAGS)
2. Записать в стек адрес возврата CS,IP
3. Сбросить флаг внешних прерываний IF
4. Передать управление обработчику прерываний с заданным номером
5. После завершения работы обработчика восстановить адрес точки возврата, восстановить состояние флагов и продолжить выполнение программы.
Обработчики прерываний могут находится в 2х местах:
1. Ядро ОС
2. BIOS
INT 21h -> из ядра ОС
INT 16h -> из BIOS
Таким образом INT прерывает выполнение программы, передает управление ОС или BIOS для выполнения того или иного обработчика прерывания, а затем возвращает управление в прерванную программу.
При выполнении операции в\в при помощи прерываний BIOS следует помнить, что многие обработчики зависят от BIOS данного конкретного компьютера. По-этому результат работы на одной вычислительной платформе может не получится на другой.
Чтобы обратиться к требуемому обработчику прерываний необходимо выполнить следующие действия:
· Загрузить регистры
· Подготовить буфер в\в
· Поместить номер обработчика (функции) в ah
· Вызвать прерывание
Пример:
Требуется завершить программу с определенным кодом и передать управление ОС.
mov al, code
mov ah,4c
INT 21h
ВЫВОД ДАННЫХ НА ДИСПЛЕЙ
Используется прерывание 21h функция которого - вывод данных на экран в символьном виде в ASCII
Основные функции вывода данных на дисплей для прерывания 21h
Номер функции в ah | Операция | Регистры или данные |
Изображение символа с проверкой ctrl+break | <dl> <-символ | |
Изображение символа без проверки ctrl+break | <dl> <-символ | |
Изображение строки символов с проверкой на нажатие ctrl+break | <DS:DX> <-начальный адрес строки с обязательным окончанием строки знаком $ |