
- •Федеральное государственное бюджетное
- •1 Используемое оборудование и программное обеспечение 5
- •2 Общая подготовка к выполнению практических заданий 5
- •3 Общий ход выполнения практических заданий 6
- •4 Основные теоретические положения по программированию устройств персональных компьютеров на языке ассемблера 6
- •5 Процесс ассемблирования и выполнения программы 43
- •Введение
- •1 Используемое оборудование и программное обеспечение
- •2 Общая подготовка к выполнению практических заданий
- •3 Общий ход выполнения практических заданий
- •4 Основные теоретические положения по программированию устройств персональных компьютеров на языке ассемблера
- •4.1 Прерывания и механизм их обработки
- •4.2 Организация работы с файлами
- •4.2.1 Управление дисками и каталогами
- •1) Установка/ проверка дискового накопителя по умолчанию.
- •2) Определение доступного дискового пространства.
- •3) Создание/ удаление подкаталога.
- •4) Получение/ изменение текущего каталога.
- •4.2.2 Подготовка файлов к операциям чтения/ записи
- •1) Создание/ удаление файла.
- •2) Открытие/ закрытие файла.
- •3) Получение/ изменение атрибутов файла.
- •4) Переименование файла.
- •4.2.3 Чтение, запись, позиционирование в файле
- •4.2.3 Организация поиска файлов
- •4.3 Управление клавиатурой
- •4.4 Управление выводом информации на дисплей
- •4.4.1 Вывод символов на экран в текстовом режиме
- •4.4.2 Управление курсором
- •4.4.3 Вывод точечной графики
- •4.5 Управление таймером
- •4.5.1 Работа со счётчиком времени суток
- •4.5.2 Генерация звука
- •4.6 Управление прерываниями. Написание собственного прерывания.
- •4.7 Управление «мышью»
- •5 Процесс ассемблирования и выполнения программы
- •5.1 Получение исполняемого модуля
- •5.2 Работа с отладчиком программ turbo debugger
- •1 2 3 5 4
- •6 Программа на языке ассемблера
- •6.1 Структура программы
- •6.2 Примеры программ
- •7 Практическое занятие № 1. Управление дисплеем. Вывод символов ascii на экран
- •7.1 Цель практического занятия
- •7.2 Контрольные вопросы
- •10 Практическое занятие № 4. Управление клавиатурой. Ввод строки символов
- •14 Практическое занятие № 8. Управление мышью
- •14.1 Цель практического занятия
- •14.2 Контрольные вопросы
- •14.3 Практическое задание
- •15 Практическое занятие № 9. Управление прерываниями. Написание собственного прерывания
- •Приложение а
4.5 Управление таймером
Согласно /5/, все IBM PC используют микросхему таймера 8253 (или 8254) для согласования импульсов от микросхемы системных часов. Число циклов системных часов преобразуется в один импульс, а последовательность импульсов подсчитывается для определения времени или импульсы могут быть посланы на громкоговоритель компьютера для генерации звука определённой частоты. Данная микросхема имеет 3 независимых канала (0, 1, 2), каждый из которых может программироваться. Доступ к каналам осуществляется через порты 40h, 41h, 42h, соответственно.
Канал 0 используется системными часами времени суток. Он устанавливается BIOS при старте таким образом, что выдаёт импульсы приблизительно 18,2 раза в секунду. Каждый импульс инициирует прерывание таймера, что увеличивает показание счётчика. Число 0 соответствует полночи 12:00; когда счётчик достигает значения, эквивалентного 24 часам, он сбрасывается в 0. Другое времени в течение суток определяется делением показателя счётчика на 18,2 для каждой секунды.
Канал 1 управляет обновлением памяти, поэтому его лучше не трогать.
Канал 2 связан с громкоговорителем компьютера, и он производит простые прямоугольные импульсы для генерации звука.
4.5.1 Работа со счётчиком времени суток
1) Чтение/ установка времени /3-5/.
MS DOS предоставляет прерывания для чтения и установки времени, производя необходимые преобразования между значением счётчика времени суток и часами- минутами- секундами. Время выдаётся с точностью до одной сотой секунды, но, поскольку счётчик обновляется с частотой в 5 раз меньшей, то показания сотых долей очень приближённые.
1.1) Функция 2Ch (пересылается в AH) прерывания 21h позволяет прочитать текущее время системных часов. При этом в регистре CH возвращаются часы (в диапазоне 0-23), в CL – минуты (0-59), в DH – секунды (0-59), в DL – сотые доли секунды (0-59), в AL – номер дня недели (0-6, 0 – воскресенье). День недели будет возвращён верно, если была установлена дата.
1.2) Функция 2Dh (пересылается в AH) прерывания 21h позволяет установить новое время системных часов. При этом в регистр CH помещаются часы (в диапазоне 0-23), в CL – минуты (0-59), в DH – секунды (0-59), в DL – сотые доли секунды (0-59).
Если при установке времени ошибок не возникло, то в регистре AL возвращается 0, в противном случае - значение FF.
2) Чтение/ установка даты /3-5/.
Значение даты хранится в переменной файла COMMAND.COM. Она хранится в формате трёх последовательных байтов, которые содержат день месяца, номер месяца и год месяца (0 соответствует 1980 году).
2.1) Функция 2Ah (пересылается в AH) прерывания 21h позволяет прочитать текущую дату. При возврате в регистре CX содержится год в диапазоне от 0 до 59, что соответствует годам в интервале от 1980 до 2099. Регистр DH содержит номер месяца (1-12), в DL - день (1-31).
2.2) Функция 2Dh (пересылается в AH) прерывания 21h позволяет установить новую дату. При этом в регистр CX помещается год (в диапазоне 0-119), в DH – номер месяца (1-12), в DL – день (1-31).
Если при установке даты ошибок не возникло, то в регистре AL возвращается 0, в противном случае - значение FF.
3) Задержка программных операций /3-5/.
При
реализации задержки в программе
посредством пустого цикла может
потребоваться много времени для того,
чтобы добиться нужного времени задержки.
Длительность цикла может меняться в
зависимости от применяемого компилятора.
Поэтому целесообразно определять время
непосредственно по часам. Чтобы обеспечить
задержку данной продолжительности,
программа должна подсчитать требуемое
количество импульсов счётчика времени
суток. Например, если необходимо
организовать задержку на 5 секунд, то
число импульсов счётчика составит
импульсу. Это значение добавляется к
считанному текущему значению счётчика.
Затем программа постоянно считывает
значение счётчика и сравнивает его с
запомненным. При достижении равенства
задержка считается выполненной.
Значение счётчика времени суток хранится в 4-х байтах. Два младших байта позволяют осуществлять задержки до одного часа.
Функция 0h (пересылается в AH) прерывания 1Ah позволяет прочитать текущее значение счётчика времени суток (в импульсах). При возврате в регистре DX содержатся 2 младших байтах, в регистре CX – 2 старших байта. Для задержек в пределах одного часа старшие байты можно игнорировать и работать только с регистром DX.