- •Учебно-методический комплекс дисциплины «Системное программирование»
- •Алматы, 2016
- •Опись содержания учебно-методического комплекса дисциплины
- •1. Цели и задачи дисциплины.
- •2. Содержание дисциплины
- •2.1.Лекционный курс
- •2.3. Лабораторные занятия
- •2.4. Самостоятельная работа студентов под руководством преподавателя
- •2.5. Самостоятельная работа студентов
- •3. Учебно-методические материалы по дисциплине
- •3.1.Список рекомендуемой литературы
- •3.2. Вопросы для подготовки к экзамену
- •1. Информация о дисциплине
- •2. Краткое описание дисциплины
- •4. Литература для изучения
- •5. Критерии оценки
- •Карта учебно-методической обеспеченности
- •Тезисы лекций
- •Лекция 2. Базовые конструкции структурного программирования
- •Лекция 3. Указатели и массивы
- •Лекция 4. Типы данных, определяемые пользователем
- •Лекция 5. Модульное программирование
- •Лекция 6. Объектно-ориентированное программирование
- •Лекция 7. Операционные системы и их интерфейсы
- •Лекция 8. Управление потоками и процессами
- •Лекция 9. Синхронизация потоков и процессов
- •Лекция 10. Обмен данными между параллельными процессами
- •Лекция 11. Структурная обработка исключений
- •Лекция 12. Работа с виртуальной памятью
- •Лекция 13. Динамически подключаемые библиотеки
- •Планы семинарских, практических, лабораторных и студийных занятий
- •4.1. Индивидуальное задание:
- •4.2. Описание метода решения
- •4.3. Описание логической структуры
- •4.4. Данные для тестирования
- •4.5. Текст программы
- •5.1. Описание методов решения
- •5.1.1. Представление в памяти
- •5.1.2. Модульная структура программного изделия
- •5.2. Описание логической структуры
- •5.2.1. Общие переменные
- •5.3. Программа пользователя
- •5.4. Тексты программных модулей
- •5.5. Варианты.
- •5. Варианты индивидуальных заданий
- •6. Пример решения задачи
- •6.1. Индивидуальное задание:
- •6.2. Описание методов решения
- •6.3. Описание логической структуры
- •6.4. Текст программы
- •5.1. Структура данных программы
- •5.2. Структура программы
- •5.3. Описание переменных
- •5.4. Описание алгоритма программы
- •5.5. Текст программы
- •5.6. Результаты работы программы
- •5.1. Индивидуальное задание.
- •5.2. Разработка алгоритма
- •5.3. Текст программы
- •5.4. Результаты работы программы
- •4. Порядок выполнения
- •5. Индивидуальные задания
- •6. Пример решения задачи
- •6.3. Индивидуальное задание.
- •6.4. Разработка алгоритма решения
- •6.4.1. Структура программы
- •6.5. Текст программы
- •6.6. Результаты работы программы
- •4. Порядок выполнения
- •5. Пример решения задачи
- •5.1. Индивидуальное задание.
- •5.4. Разработка алгоритм решения
- •5.5. Текст программы
- •5.6. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.2. Текст программы
- •5.3. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.1.1. Структура программы
- •5.1.2. Описание переменных
- •5.1.3. Описание алгоритм программы
- •5.2. Текст программы
- •5.3. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.1.1. Структура программы
- •5.1.2. Описание переменных
- •5.1.3. Описание алгоритма программы
- •5.2. Текст программы
- •5.6. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.1.1. Структура программы
- •5.1.2. Описание переменных
- •5.1.3. Описание алгоритма программы
- •5.2. Текст программы
- •5.3. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.1.3. Описание алгоритма программы
- •5.2. Текст программы
- •5.1. Разработка алгоритма решения
- •5.1.1. Структура программы
- •5.1.2. Описание переменных
- •5.3. Результаты работы программы
- •5.1.3. Описание алгоритма программы
- •5.2 Текст программы
- •5.3. Результаты работы программы
- •Материалы для мониторинга и контроля образованности обучающихся (уровня сформированности предметных компетенций):
- •Методические разработки (рекомендации)
- •Официально изданные преподавателями учебные и учебно-методические пособия (при условии публикации)
- •Перечень:
- •Учебная литература и/или материалы на электронных носителях
5.6. Результаты работы программы
В процессе работы программы на экран была выведена такая информация:
Лабораторная работа N4
Проверка состава оборудования
Тип компьютера: AT
Конфигурация:
Дисководов ГМД: 2
Математич. сопроцессор: есть
Тип дисплейного адаптера: VGA, кол., анал., 256 Кбайт
Первичный блок памяти: 16 Кбайт
Портов RS232: 2
Джойстик: нет
Принтеров: 1
Объем оперативной памяти: 639 Кбайт
Объем extended-памяти: 384 Кбайт
Адрес ПЗУ = c000. Длина модуля = 24576 байт
Версия MS-DOS 6.20
Лабораторная работа № 5. Управление клавиатурой
1. Цель работы
Изучение организации и принципов работы клавиатуры и закрепление практических навыков управления ею, а также практических навыков создания собственных программ обработки прерываний.
2. Темы для предварительного изучения
Организация и принцип работы ПЭВМ и клавиатуры.
Работа контроллера прерываний. Установка вектора прерывания.
3. Постановка задачи
Разработать программу обработки прерывания от клавиатуры, которая должна:
распознавать нажатие "горячей" комбинации клавиш и реагировать на него звуковым сигналом;
при первом нажатии "горячей" комбинации переходить в режим блокировки ввода заданной клавиши, при втором - отменять этот режим;
системная обработка всех других клавиш нарушаться не должна.
4. Порядок выполнения
Порядок выполнения работы и содержание отчета определены в общих указаниях.
5. Пример решения задачи
5.1. Индивидуальное задание.
комбинация клавиш LeftCtrl+RightShift+F3;
блокирование ввода клавиши 3.
5.2. Разработка алгоритма
5.2.1. Структура программы
Программа состоит из основной программы и трех функций.
void *readvect(int in) - функция читает вектор прерывания с номером in и возвращает его значение.
void writevect (int in, void *h) - функция устанавливает новый вектор прерывания in на новый обработчик этого прерывания по адресу h.
void interrupt new9() - процедура нового обработчика прерывания 9h.
5.2.2. Описание переменных
Глобальные переменные программы: old9 - адрес старого обработчика прерывания 9h; F3_code - скан-код клавиши "F3", которая входит в комбинацию "горячих" клавиш; key3_code - скан-код клавиши "3", которая будет блокироваться/разблокироваться при каждом нажатии "горячей" комбинации клавиш; f - флаг, который при каждом нажатии "горячей" комбинации клавиш переключается из состояния 0 в 1 или из 1 в 0 (состояние 1 означает, что клавиша "3" заблокирована); rr и sr - переменные, которые используются для задания значений регистров общего назначения и сегментных регистров соответственно при вызове прерывания.
В главной программе использует символьный массив string для проверки работы программы.
Переменные процедуры обработки прерывания 9h:
c - переменная, которая используется для подтверждения приема из клавиатуры, в случае, если была нажата клавиша "3", а флаг f показывал, что эта клавиша заблокирована;
x, y - переменные, которые используются для сохранения координат курсора на экране в момент вызова процедуры обработки прерывания;
byte17 - байт флага состояния клавиатуры в области данных BIOS по адресу 0040:0017;
byte18 - байт флага состояния клавиатуры в области данных BIOS по адресу 0040:0018;
mask - маска, которая используется для определения нажатия клавиши левый Shift (в этом случае бит 1 в byte17 установлен в 1);
mask17 - маска, которая используется для определения нажатия клавиши Сtrl (в этом случае бит 2 в byte17 установлен в 1);
mask18 - маска, которая используется для определения нажатия клавиши левый Сtrl (в этом случае бит 0 в byte18 установлен в 1);
5.2.3. Описание алгоритма программы
Главная программа выполняет такие действия:
Запоминает адрес старого обработчика прерывания 9h, вызывая функцию readvect(in) с параметром in=9.
Записывает в таблицу векторов прерываний адрес нового обработчика прерывания с помощью функции writevect().
Вводом строки символов дает возможность проверить работу программы и ее реакцию на нажатие "горячей" комбинации клавиш и блокирование/разблокирование ввода клавиши "3".
В конце работы восстанавливает в таблице векторов прерываний адрес старого обработчика.
Для решения задачи процедура обработки прерывания от клавиатуры new9() должна действовать по такому алгоритму:
Прочитать флаги состояния клавиатуры (статус клавиш-переключателей), которые находятся в области данных BIOS (два байта по адресам 0040:0017 и 0040:0018).
Выделить бит 1 в флаге по адресу 0040:0017 (если он равен 1, то нажата клавиша левый Shift).
Выделить бит 2 в этом же флаге (если он равен 1, то нажата левый или правый Ctrl).
Выделить бит 0 в флаге состояния клавиатуры по адресу 0040:0018 (если он равен 1, то нажата клавиша левый Ctrl).
Из порта 60h прочитать скан-код нажатой клавиши.
Если нажата комбинация клавиш левый Shift, правый Ctrl (нажата клавиша Ctrl, но это не правый Ctrl)и клавиша F3, то выполнить п.7. Иначе - перейти к п.8.
Сигнализировать о нажатии "горячей" комбинации клавиш звуковым сигналом, переключить значение флага блокирования ввода клавиши "3" на обратное и вызвать старый обработчик прерывания от клавиатуры.
Прочитав байт из порта 60h, определить, нажата ли клавиша 3" и если, кроме этого, еще и флаг блокирования указывает на то, что она заблокирована (f=1), то выполнить п.п. 9 и 10, иначе - вызвать старый обработчик прерывания.
Послать подтверждение приема в клавиатуру. Для этого в порт 61h на короткое время выставить "1" по шине старшего разряда.
Сбросить контроллер прерываний, посылая код 20h в порт 20h.
Функция readvect() читает вектор заданного прерывания. Для чтения вектора используется функция 35h DOS (прерывания 21h):
Вход: |
AH = 35h; AL = номер вектора прерывания. |
Выход: |
ES:BX = адрес программы обработки прерывания |
Функция writevect() устанавливает новый вектор прерывания на заданный адрес. Для записи вектора используется функция 25h DOS:
Вход: |
AL = номер вектора прерывания; DS:BX = 4-байтный адрес нового обработчика прерывания. |
