Операционные системы - Официальный сайт Индустриального

advertisement
АВТОНОМНАЯ НЕКОММЕРЧЕСКАЯ ОБРАЗОВАТЕЛЬНАЯ ОРГАНИЗАЦИЯ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
« ИНДУСТРИАЛЬНЫЙ ИНСТИТУТ »
Кафедра информационных систем и программирования
РАБОЧАЯ ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ
ОПЕРАЦИОННЫЕ СИСТЕМЫ
РАССМОТРЕНО:
УТВЕРЖДАЮ:
Проректор по научно – методической
работе________________М.В. Кузнецова
(подпись, расшифровка подписи)
«___»_____201_ г.
Направление подготовки:
на заседании кафедры информационных
систем
и
программирования
Заведующий кафедрой информационных
систем
и
программирования
_______________________ Д.В.Тюпин
(подпись, расшифровка подписи)
протокол №__1__от «___»_____201_ г.
09.03.01(230100.62)
Информатика и вычислительная
техника
Профиль подготовки: программное обеспечение вычислительной техники и автоматизированных систем
Квалификация (степень) выпускника бакалавр
Форма обучения: заочная (ускоренное обучение)
Курск – 201_
Составитель: Д.В. Тюпин
Рабочая учебная программа по дисциплине «Операционные системы» разработана в соответствии с Федеральным государственным образовательным стандартом высшего профессионального образования и учебным планом, рекомендациями и ПрООП ВПО по направлению подготовки 09.03.01(230100.62)
Информатика и вычислительная техника
профиль «Программное обеспечение вычислительной техники и автоматизированных систем»
Рабочая программа утверждена на заседании информационных систем и программирования протокол № 1 от «___»_____201_ г.
Заведующий кафедрой информационных
систем и программирования
2
_________________ Д.В.Тюпин
СОДЕРЖАНИЕ
Название раздела программы
1
Перечень планируемых результатов обучения по дисциплине (модулю),
соотнесенных с планируемыми результатами освоения образовательной программы
2
Место дисциплины в структуре ООП ВПО
3
Объем дисциплины (модуля) в зачетных единицах с указанием количества
академических часов, выделенных на контактную работу обучающихся с
преподавателем (по видам занятий) и на самостоятельную работу обучающихся
4
Содержание дисциплины (модуля), структурированное по темам (разделам) с
указанием отведенного на них количества академических часов и видов
учебных занятий
5
Перечень учебно-методического обеспечения для самостоятельной работы
обучающихся по дисциплине (модулю)
6
Фонд оценочных средств для проведения промежуточной аттестации
обучающихся по дисциплине (модулю)
7
Перечень основной и дополнительной учебной литературы, необходимой для
освоения дисциплины (модуля)
8
Перечень ресурсов информационно-телекоммуникационной сети "Интернет"
(далее - сеть "Интернет"), необходимых для освоения дисциплины
(модуля)*
9
Методические указания для обучающихся по освоению дисциплины
(модуля)
10
Перечень информационных технологий, используемых при осуществлении
образовательного процесса по дисциплине (модулю), включая перечень
программного обеспечения и информационных справочных систем (при
необходимости)
11
Описание материально-технической базы, необходимой для осуществления
образовательного процесса по дисциплине (модулю)
3
с.
4
5
5
6
10
10
73
73
73
75
76
1. Перечень планируемых результатов обучения по дисциплине (модулю), соотнесенных с планируемыми результатами освоения образовательной программы
В результате освоения дисциплины обучающийся должен овладеть следующими
знаниями, умениями и навыками:
Коды
Результаты освоения
Перечень планируемых результатов
компетенций
ООП
обучения по дисциплине
по ФГОС
Знать: структуру, состав и свойства
-стремится к саморазвитию,
ОК-6
повышению своей квалифика- информационных процессов, систем и
технологий, методы анализа инфорции и мастерства;
мационных систем;
Уметь: использовать архитектурные
и детализированные решения при проектировании систем;
Владеть: языками процедурного и
объектно-ориентированного программирования; навыками владения одной
из технологий программирования;
имеет
навыки
работы
с
комЗнать: состав, структуру, принципы
ОК-12
пьютером
как
средством реализации и функционирования инуправления информацией;
формационных технологий, используемых при создании информационных
систем, базовые и прикладные информационные технологии, инструментальные средства информационных
технологий;
ПК-9
Уметь: разрабатывать информационно - логическую, функциональную и
объектно-ориентированную
модели
информационной системы, модели
данных информационных систем; решать типовые задачи системного программирования в современных ОС;
Владеть: методами и средствами
проектирования, модернизации и модификации информационных систем;
Знать: основные принципы функционирования современных ОС и их подсистем: загрузчика, системы управления виртуальной памятью, планировщика, под- системы ввода-вывода,
файловой системы, подсистем аутентификации и ав- торизации.
Уметь: решать типовые задачи системного программирования в современных ОС; пользоваться документацией, в том числе встроенной документацией man в системах семейства
Unix;
Владеть: инструментальными сред-
- участвовать в настройке и
наладке программноаппаратных комплексов;
4
ствами программирования для ОС семейства Unix: командными процессорами sh/bash, компиляторами командной строки (GCC, Oracle Solaris
Studio), утилитой make, отладчиками
gdb или dbx, ин- тегрированными средами Eclipse или Netbeans/Oracle
Solaris Studio.
- сопрягать аппаратные и про- Знать: понятие, принципы построеграммные средства в составе ния, типы и функции операционных
информационных и автомати- систем; операционное окружение;
зированных систем;
машинно-независимые свойства операционных систем; защищенность и
отказоустойчивость операционных
систем;
Уметь: учитывать особенности работы в конкретной операционной системе, организовывать поддержку приложений других операционных систем; пользоваться инструментальными средствами операционной системы;
Владеть:
ПК-10
2. Место дисциплины в структуре ООП бакалавриата
Изучение предмета «Операционные системы» относится к профессиональному циклу (базовая часть) ФГОС ВПО по направлению подготовки 09.03.01(230100.62)
Информатика и вычислительная техника профиль «Программное обеспечение вычислительной техники и автоматизированных систем», основывается на ранее изученных дисциплинах Учебного плана «Алгебра и геометрия», «Теория вероятности и математическая статистика», «Информатика», «Дискретная математика», «Программирование».
3. Объем дисциплины (модуля) в зачетных единицах с указанием количества
академических часов, выделенных на контактную работу обучающихся с преподавателем (по видам занятий) и на самостоятельную работу обучающихся
Общая трудоемкость дисциплины составляет 6 зачетных единиц(216ч)
№
п/п
1
1.1
1.2
2
3
4
4.1
Виды учебной работы
Аудиторная работа, в том числе:
Лекции
Практические занятия
Самостоятельная работа
Курсовая работа
Промежуточная аттестация:
Экзамен/зачет
ВСЕГО час.
5
3 семестр
4семестр
Всего
140
-
6
2
4
57
6
2
4
197
4 часа
зачет
9 часов
экзамен
13
144
72
216
4. Содержание дисциплины (модуля), структурированное по темам (разделам)
с указанием отведенного на них количества академических часов и видов учебных
занятий
4.1 Разделы дисциплины (модуля) и трудоемкость по видам учебных занятий (в
академических часах) для заочной (ускоренное обучение) формы обучения
№
п\
п
Наименование тем
Всего
часов
1
Назначение и функционирование операционных систем (ОС).
Мультипрограммирование, режим разделения времени, многопользовательский режим работы, режим работы и ОС
реального времени.
Универсальные операционные системы
и ОС специального назначения, классификация операционных систем.
Модульная структура построения ОС и
их переносимость, управление процессом, понятие процесса и ядра.
Зачет/переаттестация
Итого в 3 семестре:
Сегментация виртуального адресного
пространства процесса, структура контекста процесса, идентификатор и дескриптор процесса, иерархия процесса.
Диспетчеризация и синхронизация процессов, понятие приоритета и очереди
процессов, средства обработки сигналов,
понятие событийного программирования, средства коммуникации процессов.
Способы реализации мультипрограммирования, понятие прерывания, многопроцессорный режим работы
Управление памятью, совместное использование памяти, защита памяти, механизм реализации виртуальной памяти,
стратегия подкачки страниц
Принцип построения и защита от сбоев и
несанкционированного доступа
Экзамен
35
35
35
35
35
35
35
35
4
144
14
2/2
140
12
14
2
12
2
3
4
5
6
7
8
9
Итого в 4 семестре:
Итого за дисциплину
12
Аудиторные
Лекции/
Практичеинтер.ф
ские/ интер.ф
1/1
11
1
11
9
72
2
4
57
216
2
4
197
4.2 СОДЕРЖАНИЕ ДИСЦИПЛИНЫ
Тема 1. Назначение и функционирование операционных систем (ОС).
6
11
11
12
СРС
Типы ОС – однопрограммные и мультипрограммные. ОС пакетной обработки данных
и системы с разделением времени; системы реального времени; сетевые ОС; многопроцессорные ОС. Поколения ОС. Современные тенденции развития ОС.
Тема 2. Мультипрограммирование, режим разделения времени, многопользовательский режим работы, режим работы и ОС реального времени.
Разновидности мультипрограммирования. Мультипрограммирование в системах
пакетной обработки. Мультипрограммирование в системах разделения времени.
Моменты перепланировки. Назначение и типы прерываний. Механизм прерываний.
Программные прерывания. Диспетчеризация и приоритезация прерываний в ОС.
Общие требования к системам реального времени. Параметры ОСРВ. Механизмы
реального времени. Средства для работы с таймерами. Классы систем реального времени
Тема 3 Универсальные операционные системы и ОС специального назначения,
классификация операционных систем.
Операционные системы общего назначения, поддерживающие однопрограммный
режим работы и диалоговый способ общения. Операционные системы общего назначения,
обеспечивающие пакетную обработку задач в режиме мультипрограммирования.
Операционные системы разделения времени. Операционные системы реального времени
Операционные системы, предназначенные для организации работы вычислительных
сетей.
Основные классификации операционных систем. Операционные системы семейства OS/2.
Операционные системы семейства UNIX. Операционные системы семейства Linux.
Операционные системы семейства Windows.
Тема 4 Модульная структура построения ОС и их переносимость, управление процессом, понятие процесса и ядра.
Архитектура ОС. Ядро: Средства аппаратной поддержки ОС, машинно-зависимые модули, базовые механизмы ядра, менеджеры ресурсов, интерфейс системных вызовов,
вспомогательные модули. Основные категории процессов, режимы работы процессов.
Тема 5 Сегментация виртуального адресного пространства процесса, структура контекста процесса, идентификатор и дескриптор процесса, иерархия процесса.
Образ процесса, режимы выполнения процесса, Понятие процессов и потоков.
Управление процессами. Организация многозадачности. Типы многозадачности. Понятие
нити. Многонитиевые процессы. Процесс – как единица декомпозиции системы.
Параллельные процессы. Состояние процесса, диаграмма состояний процесса. Оценка
эффективности работы ОС. Приостановка и возобновление, проблемы приостановки и
возобновления. Обеспечение монопольного доступа к разделяемым ресурсам. Семафоры.
Синхронизация при помощи семафоров.
Тема 6 Диспетчеризация и синхронизация процессов, понятие приоритета и очереди
процессов, средства обработки сигналов, понятие событийного программирования,
средства коммуникации процессов.
Схемы чередования процессов, модели процесса с различными состояниями.
Однопоточные и многопоточные процессы. Примеры реализации потоков. Проблемы
взаимодействия асинхронных процессов – синхронизация, взаимоисключение,
взаимоблокировка, коммуникация между процессами. Процессы в распределенных
системах. Ядро ОС – Определение, системные вызовы, прерывания. Микроядро –
определение, передача сообщений, синхронизация. Диаграмма состояний процессов.
Уровни
планирования,
планировщик-диспетчер.
Дисциплины
планирования;
планирование с переключением и без переключения; выбор величины временного кванта;
7
приоритеты. Алгоритмы планирования. Структура данных для процессов и ресурсов.
Проблемы возникновения взаимоблокировок. Типы ресурсов. Условия возникновения
взаимоблокировок. Тупики. Проблемы возникновения. Методы борьбы. с тупиками.
Обход тупиков.
Тема 7 Способы реализации мультипрограммирования, понятие прерывания,
многопроцессорный режим работы.
Мультипрограммирование в системах пакетной обработки: Параллельное выполнение вычислений и операций ввода-вывода Мультипрограммирование в системах разделения времени Мультипрограммирование в системах реального времени Мультипроцессорная обработка Планирование процессов и потоков Алгоритмы планирования, основанные на квантовании Алгоритмы планирования, основанные на приоритетах Смешанные
алгоритмы планирования Планирование в системах реального времени Мультипрограммирование на основе прерываний
Назначение и типы прерываний. Механизм прерываний. Программные прерывания
Диспетчеризация и приоритезация • прерываний в ОС Функции централизованного
диспетчера прерываний на примере Windows NT Процедуры обработки прерываний и
текущий процесс Системные вызовы Синхронизация процессов и потоков. Цели и
средства синхронизации
Тема 8. Управление памятью, совместное использование памяти, защита памяти,
механизм реализации виртуальной памяти, стратегия подкачки страниц.
Иерархия памяти. Вертикальное и горизонтальное управление. Задачи управления
памятью. Распределение основной памяти. Особенности основной памяти как ресурса ВС. Алгоритмы распределения памяти. Страничная организация памяти. Стратегии управления виртуальной памятью. Схемы преобразования адресов. Алгоритмы выталкивания страниц. Сегментная организация виртуальной памяти, сегментно-страничная организация.
Тема 9. Принцип построения и защита от сбоев и несанкционированного доступа.
Принцип модульности, принцип особого режима работы, принцип мобильности,
принцип совместимости, принцип генерируемости, принцип обеспечения безопасности
вычислений.
Практическая работа №5
Резидентные программы
Реализуемые компетенции: ОК-12, ПК-10 (2часа)
Цель работы:
Изучить принципы построения резидентных программ, механизм загрузки и выгрузки TSR-программ.
Контрольные вопросы
1. Какую длину в байтах имеет стандартный сектор?
2. Где расположена запись начальной загрузки?
3. Где и каким образом отображается в таблице FAT, что устройство является
гибким диском?
4. Сколько подходов требуется для считывания файла размером 3880 байт?
5. Имеется файл, размером 289010 байт.
а) где система хранит размер файла?
8
б) в каком виде оно хранится в системе?
6. Что такое DTA?
7. Что такое FCB?
Литература:
Назаров С.В. Операционные системы. Практикум: Учебное пособие. -М.: КНОРУС,
2012 - 376 с.
Операционные системы, среды и оболочки: Учебное пособие / Т.Л. Партыка, И.И.
Попов. - 5-e изд., перераб. и доп. - М.: Форум: НИЦ ИНФРА-М, 2013. - 560 с.-эбс
Современные операционные системы: учебное пособие / С.В. На-заров, А.И. Широков.
— М.: Интернет-Университет Информационных Технологий: БИНОМ. Лаборатория
знаний, 2011. — 279 с.
Практическая работа №6 Работа с дисковыми накопителями.
Организация FAT
Реализуемые компетенции: ОК-12, ПК-9 (2часа)
Цель работы
Познакомиться со способами размещения данных на магнитном носителе. Изучить
принцип построения каталога, таблицы FAT. Научиться считывать данные с диска.
Контрольные вопросы
1. Какую длину в байтах имеет стандартный сектор?
2. Где расположена запись начальной загрузки?
3. Где и каким образом отображается в таблице FAT, что устройство является
гибким диском?
4. Сколько подходов требуется для считывания файла размером 3880 байт?
5. Имеется файл, размером 289010 байт.
а) где система хранит размер файла?
б) в каком виде оно хранится в системе?
6. Что такое DTA?
7. Что такое FCB?
Литература:
Назаров С.В. Операционные системы. Практикум: Учебное пособие. -М.: КНОРУС,
2012 - 376 с.
Операционные системы, среды и оболочки: Учебное пособие / Т.Л. Партыка, И.И.
Попов. - 5-e изд., перераб. и доп. - М.: Форум: НИЦ ИНФРА-М, 2013. - 560 с.-эбс
Современные операционные системы: учебное пособие / С.В. На-заров, А.И. Широков. — М.: Интернет-Университет Информационных Технологий: БИНОМ. Лаборатория знаний, 2011. — 279 с.
4.4. Интерактивные образовательные технологии, используемые в аудиторных
занятиях
Семестр
Вид
занятия
(Л,
ЛР)
Используемые интерактивные образовательные технологии
9
Количество
часов
3
Л
ЛР
Проблемная лекция с применением мультимедийного
сопровождения лекции и технологии анализа ситуаций при активном обучении. Применение проектной
технологии, междисциплинарная интеграция.
Лекция – дискуссия
Частично-поисковая деятельность с использованием
информационных ресурсов и баз данных. Групповая
работа с использованием ситуационной задачи, СУ
(ситуационные упражнения), технологии ситуационного моделирования.
Итого:
1
2
3
5.Перечень учебно-методического обеспечения для самостоятельной работы обучающихся по дисциплине
1. Операционные улучшения. Решения системы НТМК-ЕВРАЗ: Учеб. пособие / Под ред.
В.В. Кондратьева, А.В. Кушнарева. - М.: ИНФРА-М, 2010. - 96 с – ЭБС
2. Операционные системы. Практикум: учебное пособие/С.В. Назаров, Л.П. Гудыно, А.А.
Кириченко. – М.: КНОРУС, 2012. – 376 С.- ЭБС
3. Илюшечкин, В. М. Операционные системы [Электронный ресурс] : учебное пособие /
В. М. Илюшечкин. - 2-е изд. (эл.). - М. : БИНОМ. Лаборатория знаний, 2012. - 111 с.-ЭБС
6 Фонд оценочных средств для проведения промежуточной аттестации обучающихся
по дисциплине (модулю)
Итоговыми формами контроля знаний, умений и навыков по дисциплине являются экзамен. Экзамен проводится по билетам, которые включают два теоретических вопроса и
одну практическую задачу.
Оценка знаний студентов производится по следующим критериям:

оценка «отлично» выставляется студенту, если он глубоко и прочно усвоил
программный материал курса, исчерпывающе, последовательно, четко и логически стройно его излагает, умеет тесно увязывать теорию с практикой, свободно справляется с задачами и вопросами, причем не затрудняется с ответами при видоизменении заданий, правильно обосновывает принятые решения, владеет разносторонними навыками и приемами
выполнения практических задач;

оценка «хорошо» выставляется студенту, если он твердо знает материал курса, грамотно и по существу излагает его, не допуская существенных неточностей в ответе
на вопрос, правильно применяет теоретические положения при решении практических вопросов и задач, владеет необходимыми навыками и приемами их выполнения;

оценка «удовлетворительно» выставляется студенту, если он имеет знания
только основного материала, но не усвоил его деталей, допускает неточности, недостаточно правильные формулировки, нарушения логической последовательности в изложении программного материала, испытывает затруднения при выполнении практических задач;

оценка «неудовлетворительно» выставляется студенту, который не знает
значительной части программного материала, допускает существенные ошибки, неуверенно, с большими затруднениями решает практические задачи или не справляется с ними
самостоятельно.
10
6.1. Перечень вопросов, выносимых на экзамен
Типы ОС – однопрограммные и мультипрограммные. ОК-6, ОК-12
ОС пакетной обработки данных и системы с разделением времени. ОК-12, ПК-9
Системы реального времени; сетевые ОС; многопроцессорные ОС. ПК-9, ПК-10
Поколения ОС. Современные тенденции развития ОС. ОК-6-, ОК-12, ПК-9
Разновидности мультипрограммирования. Мультипрограммирование в системах
пакетной обработки. ОК-6, ПК-10
6. Мультипрограммирование в системах разделения времени. Моменты
перепланировки. Назначение и типы прерываний. ОК-6, ПК-9, ПК-10
7. Механизм прерываний. Программные прерывания. Диспетчеризация и
приоритезация прерываний в ОС. ОК-6, ПК-9, ПК-10
8. Общие требования к системам реального времени. Параметры ОСРВ. Механизмы
реального времени. ОК-6, ПК-9, ПК-10
9. Средства для работы с таймерами. Классы систем реального времени ПК-9, ПК-10
10. Операционные системы общего назначения, поддерживающие однопрограммный
режим работы и диалоговый способ общения.ОК-12, ПК-10
11. Операционные системы общего назначения, обеспечивающие пакетную обработку
задач в режиме мультипрограммирования . ОК-6, ОК-12, ПК-10
12. Операционные системы разделения времени. ОК-6, ПК-10
13. Операционные системы реального времени Операционные системы,
предназначенные для организации работы вычислительных сетей. ОК-6,ОК-12
14. Основные классификации операционных систем.ПК-9, ПК-10
15. Операционные системы семейства OS/2. Операционные системы семейства UNIX.
Операционные системы семейства Linux. Операционные системы семейства
Windows. ОК-6, ОК-12, ПК-10
16. Архитектура ОС. ОК-12, ПК-9
17. Ядро: Средства аппаратной поддержки ОС, машинно-зависимые модули, базовые
механизмы ядра, менеджеры ресурсов, интерфейс системных вызовов, вспомогательные модули. ОК12-, ПК-10
18. Основные категории процессов, режимы работы процессов.ОК-6, ПК-9
19. Образ процесса, режимы выполнения процесса, Понятие процессов и потоков.
Управление процессами. ОК-12, ПК-9, ПК-10
20. Организация многозадачности. Типы многозадачности. ПК-9, ПК-10
21. Понятие нити. Многонитиевые процессы. ОК-6, ОК-12, ПК-10
22. Процесс – как единица декомпозиции системы. ОК-12, ПК-9
23. Параллельные процессы. Состояние процесса, диаграмма состояний процесса.
ОК-12, ПК-10
24. Оценка эффективности работы ОС. Приостановка и возобновление, проблемы
приостановки и возобновления. ПК-9, ПК-12
25. Обеспечение монопольного доступа к разделяемым ресурсам. Семафоры.
Синхро-низация при помощи семафоров. Схемы чередования процессов, модели
процесса с различными состояниями. Однопоточные и многопоточные процессы.
Примеры реализации потоков. ОК-6, ОК-12
26. Проблемы
взаимодействия
асинхронных
процессов –
синхронизация,
взаимоисключение, взаимоблокировка, коммуникация между процессами.
27. Процессы в распределенных системах. ОК-12, ПК-9
28. Ядро ОС – Определение, системные вызовы, прерывания. ОК-6, ПК-10
29. Микроядро – определение, передача сообщений, синхронизация. Диаграмма
состояний процессов. ОК-6, ПК-9, ПК-12
30. Уровни планирования, планировщик-диспетчер. ОК-12, ПК-10
1.
2.
3.
4.
5.
11
31. Дисциплины планирования; планирование с переключением и без переключения;
выбор величины временного кванта; приоритеты. ОК-6, ПК-9
32. Алгоритмы планирования. Структура данных для процессов и ресурсов. ПК-9, ПК10
33. роблемы возникновения взаимоблокировок. Типы ресурсов. ОК-12, ПК-10
34. Условия возникновения взаимоблокировок. Тупики. Проблемы возникновения.
Методы борьбы. с тупиками. Обход тупиков. ОК-6. ПК-10
35. Мультипрограммирование в системах пакетной обработки: Параллельное
выполнение вычислений и операций ввода-вывода. ОК-12, ПК-9
36. Мультипрограммирование в системах реального времени. ПК-9, ПК-10
37. Мультипроцессорная обработка. Планирование процессов и потоков. ОК-12, ПК-9
38. Алгоритмы планирования, основанные на квантовании. ПК-9, ПК-10
39. Алгоритмы планирования, основанные на приоритетах.ОК-6. ОК-12
40. Смешанные алгоритмы планирования Планирование в системах реального времени
Мультипрограммирование на основе прерываний ОК-12, ПК-9
41. Назначение и типы прерываний. Механизм прерываний. ОК-6, ПК-10
42. Программные прерывания. ОК-6, ПК-10
43. Диспетчеризация и приоритезация • прерываний в ОС Функции централизованного
диспетчера прерываний на примере Windows NT. ОК-12, ПК-9, ПК-10
44. Процедуры обработки прерываний и текущий процесс. ОК-6, ОК-12, ПК-10
45. Системные вызовы. ОК-12, ПК-9, ПК-10
46. Синхронизация процессов и потоков. Цели и средства синхронизации ОК-6. ПК-9,
ПК-12
47. Иерархия памяти. ОК-12, ПК-10
48. Вертикальное и горизонтальное управление. Задачи управления памятью. Распределение основной памяти. ПК-9, ПК-10
49. Особенности основной памяти как ресурса ВС. Алгоритмы распределения памяти.
ОК-6, ОК-12
50. Страничная организация памяти. ПК-9, ПК-12
51. Стратегии управления виртуальной памятью. ОК-12, ПК-10
52. Схемы преобразования адресов. ПК-9, ПК-10
53. Алгоритмы выталкивания страниц. ОК-6. ПК-10
54. Сегментная организация виртуальной памяти, сегментно-страничная организация.
ОК-12, ПК-10
55. Принцип модульности. ПК-9, ПК-10
56. Принцип особого режима работы. ОК-6. ПК-9
6.2 Образцы тестовых заданий для самостоятельной работы
Задание 1.
Выберите из предложенного списка, что может являться критерием эффективности вычислительной системы:
1. пропускная способность;
2. занятость оперативной памяти;
3. загруженность центрального процессора;
12
Задание 2.
Системы пакетной обработки предназначены для решения задач:
1. вычислительного характера
2. требующих постоянного диалога с пользователем
3. требующих решения конкретной задачи за определенный промежуток времени
Задание 3.
В каких системах гарантируется выполнение задания за определенный промежуток времени:
1. пакетной обработки
2. разделения времени
3. системах реального времени
Задание 4.
В системах пакетной обработки суммарное время выполнения смеси задач:
1. равно сумме времен выполнения всех задач смеси
2. меньше или равно суммы времен выполнения всех задач смеси
3. больше или равно суммы времен выполнения всех задач смеси
Задание 5.
В системах реального времени
1. набор задач неизвестен заранее
2. набор задач известен заранее
3. известен или нет набор задач зависит от характера системы
Задание 6.
Самое неэффективное использование ресурсов вычислительной системы:
1. в системах пакетной обработки
2. в системах разделения времени
3. в системах реального времени
Задание 7.
В многопоточных системах поток есть –
13
1. заявка на ресурсы
2. заявка на ресурс ЦП
3. заявка на ресурс ОП
Задание 8.
Потоки создаются с целью:
1. ускорения работы процесса
2. защиты областей памяти
3. улучшения межпроцессного взаимодействия
Задание 9.
Как с точки зрения экономии ресурсов лучше распараллелить работу:
1. создать несколько процессов
2. создать несколько потоков
3. случаи a) и b) равнозначны, можно выбирать любой из них
Задание 10.
Планирование потоков игнорирует:
1. приоритет потока
2. время ожидания в очереди
3. принадлежность некоторому процессу
Задание 11.
В каких системах тип планирования статический
1. реального времени
2. разделения времени
3. пакетной обработки
Задание 12.
Состояние, которое не определено для потока в системе:
1. выполнение
2. синхронизация
3. ожидание
14
4. готовность
Задание 13.
Каких смен состояний не существует в системе:
1. выполнение → готовность
2. ожидание →выполнение
3. ожидание → готовность
4. готовность → ожидание
Задание 14.
Какой из алгоритмов планирования является централизованным:
1. вытесняющий
2. невытесняющий
Задание 15.
При каком кванте времени в системах, использующих алгоритм квантования, время ожидания потока в очереди не зависит от длительности ее выполнения:
1. при маленьком кванте времени
2. при длительном кванте времени
3. при любом кванте времени
Задание 16.
Приоритет процесса не зависит от:
1. того, является ли процесс системным или прикладным
2. статуса пользователя
3. требуемых процессом ресурсов
Задание 17.
В каких пределах может изменяться приоритет потока в системе Windows NT:
1. от базового приоритета процесса до нижней границы диапазона приоритета потоков реального времени
2. от нуля до базового приоритета процесса
3. базовый приоритет процесса ± 2
Задание 18.
15
Каких классов прерываний нет?
1. аппаратных
2. асинхронных
3. внутренних
4. программных
Задание 19.
Какие из прерываний можно считать синхронными?
1. внешние
2. внутренние
3. программные
4. динамические
Задание 20.
Память с самой высокой стоимостью единицы хранения:
1. дисковая память
2. оперативная память
3. регистры процессора
Задание 21.
Какая функция ОС по управления оперативной памятью характерна только для мультизадачных ОС:
1. выделение памяти по запросу
2. освобождение памяти по завершению процесса
3. защита памяти
Задание 22.
Какая стратегия управления памятью определяет, какие конкретно данные необходимо
загружать в память:
1. выборки
2. размещения
3. замещения
4. загрузки
16
Задание 23.
Виртуальные адреса являются результатом работы:
1. пользователя
2. транслятора
3. компоновщика
4. ассемблера
Задание 24.
Какого типа адреса могут быть одинаковыми в разных процессах:
1. виртуальные
2. физические
3. реальные
4. сегментные
Задание 25.
Недостатки распределения памяти фиксированными разделами:
1. сложность реализации
2. сложность защиты
3. ограничение на число одновременно выполняющихся процессов
4. фрагментация памяти
Задание 26.
Какой процесс обязательно должен выполняться в системе памяти с перемещаемыми
разделами:
1. сжатие
2. перемещение
3. свопинг
Задание 27.
Что из ниже перечисленного верно для свопинга:
1. на диск выгружается неиспользуемая в настоящий момент часть процесса
2. на диск выгружаются неиспользуемые процессом данные
17
3. на диск выгружается не активный процесс
Задание 28.
Таблица страниц используется для:
1. преобразования виртуального адреса в физический
2. для ускорения работы процесса
3. для реализации свопинга
Задание 29.
Объем страницы:
1. выбирается по возможности максимальный
2. выбирается минимальным
3. для процессоров х86 стандартно равен 4 кбайта
Задание 30.
Кэширование – это:
1. способ функционирования дисковых устройств
2. способ работы с ОП
3. способ взаимного функционирования двух типов запоминающих устройств
Задание 31.
Что может выступать в качестве кэша для ОП:
1. дисковые устройства
2. быстродействующая статическая память
3. виртуальная память
Задание 32.
Атаки класса «отказ в обслуживании» направлены на:
1. полный или частичный вывод ОС из строя
2. вывод из строя аппаратуры ПК
3. полное или частичное удаление установленного ПО
Задание 33.
Какой вид многозадачности не существует?
18
1. Вытесняющая многозадачность.
2. Кооперативная (не вытесняющая) многозадачность.
3. Симметричная многозадачность.
Задание 34.
Существуют ли классификация ядер ОС по особенностям выполнения ядра в многопроцессорных системах? (учитывая, что такие системы ядром поддерживаются)
1. Да
2. Нет
Задание 35.
Где должен располагаться код для обнаружения оборудования? (учитывая современные
устройства)
1. В ядре (или обязательных модулях, серверах для немонолитных архитектур).
2. Вне ядра, в драйверах.
Задание 36.
Какое ядро современных ОС поддерживает Multiboot Specification?
1. Windows
2. SunOS 82
3. MacOS
4. Linux
5. Все ядра BSD
Задание 37.
Что означает аббревиатура PIC в контексте ОС?
1. Programmable Interrupt Controller
2. Past Implemented Code
3. Position Independent Code
4. Portable Incompatible Code
Задание 38.
Какие основные преимущества микроядерной архитектуры?
1. Упрощение переносимости
19
2. Улучшение безопасности
3. Повышенные отказоустойчивость и степень структурированности
4. Все выше перечисленное
Задание 39.
Предшественником какого современного семейства ОС была ОС Minix Эндрю Таненбаума?
1. BSD
2. Windows
3. Linux
Задание 40.
Нашли ли экзоядерные ОС широкое применение в современной вычислительной технике?
1. Да
2. Нет
Задание 41.
В какой из ОС впервые был реализован стек протоколов TCP/IP?
1. BSD
2. Windows
3. Linux
4. DOS
Задание 42.
Выберите не подходящее утверждение об отношении DOS к первым версиям Windows?
1. В Windows можно было запускать приложения DOS
2. Многие функции Windows делегировались соответствующим функциям DOS (то
есть для этого производилось переключение режимов работы ЦПУ)
3. Поддержка приложений DOS была ограниченной и неполной (при эмуляции на
VDM, в рамках режима V86)
Задание 43.
В какой ОС поддержка графического интерфейса пользователя (GUI) интегрирована
непосредственно в ядро?
20
1. Windows
2. BSD
3. Linux
Задание 44.
Укажите типы сообщений, которые могут использоваться в микроядерных ОС.
1. Синхронные и асинхронные.
2. Только синхронные.
3. Только асинхронные.
Задание 45.
В чём главный недостаток монолитных ядер?
1. Их нельзя модифицировать во время работы
2. Со временем они настолько разрастаются, что резко усложняется внесение какихлибо изменений
3. Они занимают слишком много оперативной памяти
Задание 46.
Укажите основное средство межпроцессного взаимодействия в микроядерных архитектурах.
1. Потоки
2. Удалённые вызовы процедур (RPC, Remote Procedure Call)
3. Сообщения
Задание 47.
Какая нотация вызовов функций принята в системных вызовах Windows?
1. Смесь нотаций языков C и Pascal (обратный порядок аргументов, очистка стека
функцией)
2. Нотация языка Pascal (прямой порядок аргументов, очистка стека функцией)
3. Нотация языка C (обратный порядок аргументов, очистка стека вызывающим кодом)
Задание 48.
Достаточно ли установки антивирусного пакета для того, чтобы считать ОС защищенной:
21
1. да
2. нет
3. зависит от конкретных условий работы
Задание 49.
Для обеспечения безопасности системы должны использоваться средства, которые при
отказе переходят в состояние:
1. максимальной защиты
2. минимальной защиты
Задание 50
При организации защиты в системе необходимо руководствоваться принципом:
1. максимальной защиты
2. минимальной защиты
3. баланса возможного ущерба от угрозы и затрат на ее предотвращение
6.3Методические указания по выполнению самостоятельной работы
Структура, порядок выполнения и оформления отчетности
Порядок выполнения.
1. Изучить информационные материалы к занятию.
2. Изучить словесную постановку задачи;
3. Выбрать метод, который лучше всего подходит для решения поставленной
задачи;
4. Выполнить указанные задания, при необходимости разработать программу,
решающую поставленную задачу, оттестировать и отладить программу;
5. Продемонстрировать работу программы преподавателю;
6. Написать и представить к защите отчет по работе.
Содержание отчета
1. Название самостоятельной работы.
2. Цель работы.
3. Словесная постановка задачи.
4. Алгоритм решения задачи, обоснование правильности выбора алгоритма, листинг программы (если требуется).
22
5. Ответы на контрольные вопросы по согласованию с преподавателем.
Самостоятельная работа №1 Создание исполнительных программ на
ассемблере
Цель работы
Изучить программную модель компьютера, структуру программы на языке ассемблера. Изучить простые типы данных ассемблера. Набрать и отладить простейшую программу на ассемблере.
Информационные материалы к занятию
В микропроцессоре I8086 имеется четырнадцать 16-разрядных регистров, условно
образующих четыре группы (рис. 1).
Название
Регистры
Биты регистров
регистров
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
группа
имя
15
0
Сегм. рг. стека
ss
Сегмент15
0
Сегм. рг. кода
cs
ные реги15
0
Сегм. рг. данных
ds
стры
15
0
Доп. сегм. рг. данн.
es
a
a
15
8 7
0
Аккумулятор
ax
h
l
b
b
15
8 7
0
Базовый регистр
Регистры bx
h
l
общего
c
c
15
8 7
0
назначения cx
Счетчик
h
l
d
d
15
8 7
0
Регистр данных
dx
h
l
15
0
Индекс источника
Индексные si
15
0
Индекс приемника
di
и указа15
0
тельные
Указ. верш. стека
sp
15
0
регистры bp
Базовый рг. стека
15
0
Регистры ip
Счетчик команд
состояния
o
a p
и управле- fl
sf zf
cf Рг. флагов (PSW)
f
f
f
ния
Регистры микропроцессора I8086.
Первую группу составляют сегментные регистры ss, ds, cs, es. Они содержат базовый
адрес соответствующего сегмента.
Вторая группа – регистры общего назначения – регистры операндов логических и
арифметических операций.
ax/ah/al – аккумулятор – применяется для хранения промежуточных данных при выполнении вычислений;
bx/bh/bl – базовый регистр – применяется для хранения базового адреса некоторого
объекта в памяти;
cx/ch/cl – регистр-счетчик – применяется в командах, производящих некоторые повторяющиеся действия;
dx/dh/dl – регистр данных – предназначен для хранения промежуточных данных и
для указания адреса внешнего устройства при операциях ввода/вывода.
Необходимо иметь ввиду, что каждый из что 16-разрядных регистров общего назна23
чения состоит из двух 8-разрядных регистров. Например, регистр ax состоит из ah и al
(ah – занимает старшие 8 бит, al – младшие).
Третья группа – индексные и указательные регистры (определяют компоненты адреса и ячейки памяти):
si – индекс источника. Этот регистр в целочисленных операциях содержит текущий
адрес элемента в цепочке-источнике;
di – индекс приемника (получателя).
Для работы со стеком есть специальные команды, а в программной модели МП –
специальные регистры:
sp – регистр указателя стека. Содержит указатель вершины стека в текущем сегменте
стека;
bp – регистр указателя базы кадра стека. Предназначен для организации произвольного доступа к данным внутри стека.
Четвертая группа – регистры состояния и управления. Регистр ip – указатель команд.
Содержит смещение подлежащей выполнению команды относительно содержимого сегментного регистра cs в текущем сегменте команд.
FL – регистр флагов (PSW). Отдельные биты данного регистра имеют определенное назначение и называются флагами. В них в виде однобитовых признаков по принципу
ДА - НЕТ (ВКЛЮЧЕНО - ВЫКЛЮЧЕНО) фиксируется информация о результатах выполнения некоторых команд, например арифметических.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
of
sf zf
af
pf
cf
Условные флажки слова состояния процессора PSW
of – признак переполнения;
sf – признак знака: 1 – число < 0, 0 – число > 0
zf – признак нуля: 1 – число = 0
af – признак переноса из тетрады;
pf – признак четности;
cf – признак переноса.
В последующем эта информация может использоваться, например, командами
условной передачи управления.
Минимальной адресуемой единицей основной памяти ПЭВМ является байт, состоящий из 8 бит. Доступ к байтам основной памяти осуществляется по номерам (номер
байта является его физическим адресом в устройстве памяти).
Для адресации основной памяти в микропроцессоре i8086 предусматриваются 20битовые адреса, что позволяет работать с основной памятью размером 220 = 1 Мбайт.
Физический адрес формируется из 16-битового смещения и содержимого 16битового сегментного регистра, сдвинутого влево на 4 бита (см. рис. 3).
Формирование 20-разрядного физического адреса из 16-разрядных регистров.
Микропроцессор аппаратно поддерживает структурную организацию программы в
виде нескольких частей, называемых сегментами. В любой ехе-программе обязательно
присутствие как минимум одного сегмента – сегмента кода. В случае, если для работы
24
программы необходим стек, тогда добавляется сегмент стека. При использовании в программе переменных, они описываются в сегменте данных. Если количество используемых
переменных велико, и они не помещаются в отведенный сегмент данных, в программе используют дополнительный сегмент данных.
Программы в com-формате всегда содержат всего один сегмент – сегмент кода. В
этом сегменте расположены код программы, переменные программы и область стека. Общий размер com – программы ограничен максимальным размером сегмента, т.е. 64 кБ.
Это вызвано тем, что микропроцессор I8086 16-разрядный, значит максимальный размер
сегмента 216-1=65535=64 кБ.
Стек представляет собой специальным образом организованную область памяти,
допускающую последовательную запись элементов данных длиной 2 байта (слово) и чтение их в порядке, обратном порядку записи (протокол LIFO – последний пришел, первый
ушел). Для хранения адреса первой свободной ячейки (вершины), служит региструказатель вершины стека sp (см. рис. 4, где а - текущее состояние стека, б - запись D, в чтение D).
Указатель
вершины (sp)
A
B
C
A
B
C
D
A
B
C
Сегмент
стека
Начало сегмента
стека (SS)
Смещение bp=0000
а)
б)
в)
Работа стека при занесении и чтении данных
Все операции в стеке возможны только с ячейкой, на которую указывает указатель
вершины – sp. Стек используется для временного хранения данных и адресов, например
при вызове подпрограмм, когда в стек заносится адрес возврата и значения параметров,
передаваемых в подпрограмму.
При работе с переменными, необходимо учитывать, что числа могут задаваться в
следующих форматах:
1) двоичная – последовательность знаков 0 и 1, заканчивающаяся символом «b»
или «B» , например 00110101b.
2) десятичная – последовательность цифр от 0 до 9, возможно заканчивающаяся
символом «d» или «D» , например 124, 23345d.
3) шестнадцатиричная – последовательность цифр от 0 до 9 и букв от A до F, заканчивающаяся символом «h» или «H» , например 124h, 2EA5h. первым знаком обязательно должна быть десятичная цифра.
4) восмеричная – последовательность цифр от 0 до 7, заканчивающаяся символом «q» или «Q» , например 124q, 233q.
Для описания простых типов данных используются специальные директивы резервирования и инициализации данных:
db – 1 байт, dw – 2 байта, dd – 4 байта, dq – 8 байтов, dt – 10 байтов.
Примеры резервирования и инициализации:
25
x db ?
y dw 55
z dw 361Bh
x1 db 5 dup(8)
;
;
;
;
;
;
;
под переменную х резервируется
1 байт, содержимое поля не определено
2 байта, значение 55
2 байта, значение 361Bh (16-ая СС)
5 байт, в каждом байте значение 8
можно и так х1 db 8,8,8,8,8
строка символов. В конце строки
text db ’IBM PC’, ’$’
; должен быть символ – ’$’.
При размещении в памяти реализуется принцип: младший байт по младшему адресу.
Поэтому переменная z хранится в памяти в виде:
1
B
3
6
Мл. байт Ст. байт
Последовательность разработки exe-программы
Схема процесса разработки программы на ассемблере включает четыре этапа.
На первом этапе в любом текстовом редакторе формируется файл с ассемблерной
программой. Файл должен иметь расширение .asm.
На втором этапе – трансляция программы. На этом шаге формируется объектный
модуль (.obj). Для трансляции используется программа-компилятор tasm.exe Формат запуска tasm.exe:
TASM [опции] имя_исходного файла [,имя_объектного файла] [,имя_ файла_листинга] [,имя_файла_перекрестных_ссылок].
Рекомендуется при первой трансляции формировать файл листинга программы
(включать опцию /l). Этот файл окажется полезным для локализации ошибок. Простейшая
форма трансляции файла name.asm:
tasm.exe name.asm /l
Если при трансляции ошибок нет, то формируется объектный модуль name.obj.
На третьем этапе – компоновка программы (применяется компоновщик tlink.exe).
При этом формируется исполняемый exe-модуль.
Формат:
TLINK [опции] список_объектных_файлов [,имя_загрузочного_модуля] [,… ]
Простейшая форма: tlink.exe name.obj
На последнем этапе – собственно выполнение полученной программы name.exe.
Структура программы на ассемблере имеет вид:
;Описание сегмента стека
Stek segment para Stack 'Stack'
db 256 dup (0)
; Под стек резервируется 256 байт, что
Stek ends
; соответствует 100h байт в 16-ной С.С.
;Описание сегмента данных
Data segment
………
Data ends
;Описание сегмента кода
Code Segment
Start proc far
Assume ss:stek,ds:data,cs:code
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
; Описание используемых переменных
; Начало главной процедуры Start
; Связывание имен описанных сегментов
; с сегментными регистрами
; Сохранение в стеке адреса текущего
; сегмента данных...
; и нулевого смещения
; Запись в регистр ds адреса начала
; сегмента данных
26
………
ret
Start endp
code ends
end start
; Текст программы
; Окончание процедуры Start,…
; сегмента кода
; Выход в DOS
Задания
1. Набрать в любом текстовом редакторе приведенную ниже программу. В
программе используются следующие инструкции:
push __ Занесение операнда в стек.
xor __,__
Выполнение операции «Исключающее или» над операндами
mov __,__
Пересылка значения второго операнда в первый.
cmp __,__
Сравнение первого и второго операндов.
add __,__
Сложение первого и второго операндов.
sub __,__
Вычитание первого и второго операндов.
and __,__
Операция «Логическое И» между первым и вторым операндом.
shl __,__
Сдвиг первого операнда влево на значение, хранящееся во втором
операнде.
2. С помощью транслятора получить файл листинга и объектный код этой программы. В случае необходимости исправить ошибки. Далее из объектного кода получить исполняемый файл.
Stek segment para Stack 'Stack'
db 256 dup (0)
Stek ends
Data segment
a db -5
b db 12
c db 4
res1 db ?
res2 db ?
Data ends
Code Segment
Start proc far
Assume ss:stek,ds:data,cs:code
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
mov ah,a
mov al,b
cmp ah,al
add ah,al
mov res1,ah
mov ah,c
cmp ah,al
sub ah,al
mov res2,ah
; Описание сегмента стека
; Под стек резервируется 256 байт
; Описание сегмента данных
; Описание используемых переменных
; Описание сегмента кода
; Начало главной процедуры Start
; Связывание имен описанных сегментов
; с сегментными регистрами
; Сохранение в стеке адреса текущего
; сегмента данных...
; и нулевого смещения
; Запись в регистр ds адреса начала
; сегмента данных
; занесение значения переменной a в ah
; занесение значения переменной b в al
; сравнение ah и al
; вычисление ah ← ah+al
; занесение значения ah в res1
; занесение значения переменной c в ah
; сравнение ah и al
; вычисление ah ← ah-al
; занесение значения ah в res2
27
mov ah,b
and ah,00000100b
mov cl,2
shl ah,cl
ret
Start endp
code ends
end start
; занесение значения переменной b в ah
; логическая операция ah=ah·00000100b
; занесение 2 в cl
; сдвиг значения ah на 2 разряда влево
; Окончание процедуры Start, …
; сегмента кода …
; и программы. Выход в DOS
Контрольные вопросы
1. Для числа 43 зарезервируйте поле 1 байт и запишите инициализацию, задавая число в а) 10-ом б) 2-ом в) 16-ом формате.
2. Условия задачи 1, только поле – 2 байта.
3. Зарезервируйте поле в 4 байта, содержимое поля безразлично.
4. Задайте строку текста в сегменте данных вида: Personal Computer.
5. Зарезервируйте поле для последовательно идущих 10 элементов, каждый из
которых есть число 25 и занимает 2 байта.
6. Напишите программу без сегмента данных.
7. Какой тип данных необходимо выбрать, если максимальное значение переменной равно 0F3h, -0215?
8. Какой тип данных необходимо выбрать, если максимальное значение переменной равно 10F3h, -100?
Самостоятельная работа №2 Модульное программирование. Использование
процедур
Цель работы
Узнать основные подходы в реализации модульного программирования. Приобрести
практические навыки программирования с использованием процедур.
Информационные материалы к занятию
При разработке программ на языке ассемблера часто используют процедуры. Это
позволяет уменьшить размер программы, а также упрощает процесс программирования,
так как он разбивается на логически не связанные друг с другом части. Для оформления
процедур как отдельных объектов существуют специальные директивы proc/endp и команда ret. Формат описания:
имя_процедуры PROC [FAR/NEAR]
; начало процедуры
………
RET
; возврат из процедуры
имя_процедуры ENDP
; конец процедуры
В лабораторной работе рассматриваются так называемые ближние процедуры (с атрибутом NEAR, принимаемым по-умолчанию), находящиеся в одном кодовом сегменте с
вызывающей программой.
Рассмотрим вариант, когда кодовый сегмент состоит из основного текста и одной
28
или более процедур. В этом случае структура программы имеет вид:
Stek segment para Stack 'Stack'
db 256 dup (0)
Stek ends
Data segment
………
; сегмент данных
Data ends
Code Segment
Start proc far
; точка входа в главную процедуру
Assume ss:stek,ds:data,cs:code
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
………
call name1
; вызов процедуры 1
………
call name2
; вызов процедуры 2
………
ret
Start endp
name1 proc near
; начало процедуры name1
………
ret
; возврат в главную процедуру
name1 endp
; конец процедуры
name2 proc
; начало процедуры name2
………
ret
; возврат в главную процедуру
name2 endp
; конец процедуры
code ends
end start
Команда CALL запоминает адрес возврата (адрес следующей команды) путем размещения его в стеке. Для ближнего вызова, адрес состоит из содержимого регистра ip, для
дальнего – из комбинации регистров cs:ip. Затем, в счетчик команд загружается адрес
первой инструкции вызываемой процедуры и она начинает выполняться.
Команда RET – последняя исполняемая команда в процедуре. Она извлекает из стека
сохраненный ранее адрес возврата. Размер адреса, извлекаемого из стека, всегда соответствует размеру адреса, помещенного в стек при вызове процедуры (по команде CALL).
Передавать аргументы для процедуры можно тремя способами: используя общую
область памяти, через регистры и через стек.
Для иллюстрации особенностей передачи параметров рассмотрим следующий пример.
Определена матрица A размером 4x4. Из основной программы в процедуру передаются элементы матрицы. В процедуре осуществляется их обработка по правилу: если число отрицательное или равно нулю, то записывается в массив C, иначе в массив B.
Рассмотрим вариант использования общей памяти сегмента данных.
………
; В сегменте данных
A db 1, 2, 3, 4
db 5, 6, 7, 8
29
db -9,-1,-1,-2
db -4,9, 0, 1
B db 16 dup(0)
C db 16 dup(0)
i dw 0
j dw 0
………
; в сегменте кода
Start proc far
Assume ss:stek,ds:data,cs:code
………
call znac
ret
start endp
znac proc
mov di,0
mov si,0
mov bx,0
mov dx,0
mov cx,4
m4:
push cx
mov cx,4
m3:
mov al,A[bx][si]
cmp al,0
jle m1
mov di,i
mov b[di],al
inc I
jmp m2
m1:
mov di,j
mov c[di],al
inc j
m2:
inc si
loop m3
add bx,4
xor si,si
pop cx
loop m4
ret
znac endp
code ends
end start
; точка входа в главную процедуру
; вызов процедуры
; возврат в главную процедуру
; конец процедуры
; индекс для С
; индекс для B
; начальный адрес строки A
; индекс столбца в строке для A
; количество строк
; количество столбцов
; из массива A в регистр al
; сравнение
; <= на метку m1
; запись в B
; инкрементирование индекса
Передача аргументов через регистры. Это наиболее простой в реализации способ передачи данных. Целесообразно использовать при небольшом объеме передаваемых данных и при размере данных 8, 16 или 32 бита.
Программа при этом способе будет выглядеть так:
30
………
mov di,0
mov si,0
mov bx,0
mov dx,0
mov cx,4
m4:
push cx
mov cx,4
m3:
mov al,A[bx][si]
call znac
loop m3
add bx,4
mov si,0
pop cx
loop m4
ret
main endp
znac proc
cmp al,0
; в al – элемент массива
; вызов процедуры
; использование элемента,
; переданного через регистр
jle m1
mov di,i
mov b[di],al
inc i
jmp m2
m1:mov di,j
mov c[di],al
inc j
m2:inc si
ret
znac endp
………
Передача аргументов через стек. Суть этого метода заключается в том, что вызывающая процедура самостоятельно заносит в стек передаваемые данные, после чего производит вызов вызываемой процедуры. Типичный фрагмент программы, содержащий вызов
процедуры с передачей аргументов через стек:
………
mov di,0
mov i,0
mov si,0
mov bx,0
mov cx,4
m4:push cx
mov j,0
mov cx,4
m3:mov si,j
mov al,A[bx][si]
inc si
31
mov j,si
push ax
call znac
loop m3
add bx,4
pop cx
loop m4
ret
start endp
; запись в стек аргумента
; вызов процедуры
znac proc
push bp
; сохранение в стеке
; содержимого bp
; настройка bp на вершину стека
; извлечение из стека аргумента
mov bp,sp
mov ax,[bp+4]
cmp al,0
jle m1
mov si,i
mov b[si],al
inc si
mov i,si
jmp m2
m1:mov c[di],al
inc di
m2:mov sp,bp
pop bp
; восстановление bp
; восстановление старого значения bp
; до входа в процедуру
; возврат в вызывающую программу
ret
znac endp
………
Задания
1. В соответствии с вариантом напишите программу на языке ассемблера для вычисления значения y. Значения y1 и y2 необходимо вычислять в подпрограммах. Исходные
данные для вычисления выражений должны присутствовать в сегменте данных (a и x числа со знаком длиной в байт). Аналогично, результаты вычислений должны быть помещены в сегмент данных.
3. Варианты заданий.
№
Передача аргузадаУсловия
ментов
ния
ax, если х  10
 a  x, если х  a
1.
Через стек
y2  
y1  
y=y1 + y2
2a  x, если x  a
x, если x  10


2.
3.
4.
5.
y=y1 - y2
y=y1 * y2
y=y1 + y2
y=y1 - y2
 x  2, если х  2
y1  
 8, если x  2
 x  a, если х  a
y1  
 5, если x  a
 4, если х  0
y2  
a  x, если x  0
 a, если a  x
y2  
ax, если a  x
 a  1, если х  a
y2  
ax  1, если x  a
2  x, если х  2
y1  
a  3, если x  2
 x , если х  2
y1  
 x  a, если x  0
 a  x, если х mod 3  1
y2  
7, в остальных случаях
32
Через общую
память
Через регистры
Через стек
Через общую
память
6.
7.
y=y1 + y2
 x mod 4, если х  a
y1  
 a, если x  a
ax, если х / a  3
y2  
 x, если x / a  3
y=y1 + y2
 4 x, если х  4
y1  
 x  a, если x  4
7, если х  нечетное
Через общую

y2  
память
x
/
2

a
,
в
остальных
случаях

Через регистры
Контрольные вопросы
1. Какие директивы используются для оформления процедур?
2. Какие варианты передачи аргументов в процедуре можно использовать?
3. Какие регистры обслуживают стек?
4. Какой регистр используется для произвольного доступа к данным в стеке?
5. Какая команда записывает слово в стек?
6. Какая команда извлекает слово из стека?
7. При извлечении параметра из стека записали mov ax,[bp+4].
Какая процедура near или far была использована?
8. Что необходимо записать при вызове процедуры дальнего типа
в команде mov ax,[bp+?]
Самостоятельная работа №3 Работа с прерывания
Цель работы
Изучить механизм вызова и обработки прерываний. Изучить структуру программы
обработки прерываний
Информационные материалы к занятию
Прерыванием называется временное переключение процессора на выполнение некоторой заранее определенной последовательности команд, после завершения которой процесс выполнения прерванной программы возобновляется.
Существуют аппаратные и программные прерывания. Аппаратные прерывания инициируются аппаратурой – с системной платы, с внешнего устройства или самим процессором. Они не координируются с работой программного обеспечения. Аппаратные прерывания, вызванные процессором, называются внутренними, иначе – внешними.
Программные прерывания – это обычные процедуры, которые вызываются из программ для выполнения рутинной работы (например, обработка нажатой на клавиатуре
клавиши или вывод символа на экран). Однако эти процедуры содержаться не внутри вашей программы, а в ОС.
Внешние сигналы на прерывание поступают на специальные микросхемы - контроллеры прерываний 8259А, имеющие несколько уровней приоритета. Уровни приоритета
определяются аппаратно в зависимости от места подключения внешнего устройства.
Как правило, самый высокий приоритет имеет системный таймер, затем следует кла33
виатура, что обеспечивает оперативное управление ЭВМ. Далее идут прочие внешние
устройства. Завершают список обычно самые медленные устройства – накопители на
гибких магнитных дисках и устройство печати.
Выполнение всех прерываний, кроме прерывания #2, можно запретить сбросив флаг
IF (команда cli). Прерывание 2 в связи с этим носит название немаскируемого и используется для того, чтобы выполнять обработку сигналов, наличие которых нельзя игнорировать, например, сигнала о недопустимом изменении напряжения в сети питания. Восстановить флаг IF можно с помощью команды sti.
Адреса программ обработки прерываний называются векторами. Каждый вектор
имеет длину 4 байта. В первом слове хранится значение IP, а во втором – CS. Младшие
1024 байта памяти содержат векторы прерываний. Вместе взятые они называются таблицей векторов прерываний. Таким образом, в таблице есть место для 1024/4=256 векторов.
При поступлении запроса на аппаратное прерывание выполняется следующая последовательность действий:
1) Проверяется установка флажка IF (для немаскируемых прерываний этот пункт игнорируется). Если IF = 1, прерывания разрешены, Если 0 – запрещены;
2) После завершения текущей команды, МП выдает сигнал разрешения прерывания.
3) Внешнее устройство передает в МП номер прерывания (N).
4) Текущее содержимое PSW, CS, IP заносится в стек.
5) Флажки IF и TF сбрасываются.
6) В IP загружается содержимое 4*N, а в CS – содержимое 4*N+2 .
7) Выполняется процедура обработки прерывания.
8) Восстанавливаются флаги IF и TF.
9) Команда IRET осуществляет извлечение из стека старые значения IP, CS, PSW.
Производится возврат в прерванную программу.
Программа обработки прерывания в общем случае имеет следующую структуру:
<имя> proc far
<сохранение содержимого используемых регистров>
<обработка прерывания>
<восстановление содержимого регистров>
iret
; восстановление сохраненных PSW,CS,IP
<имя> endp
Для замены стандартных обработчиков прерываний на пользовательские, необходимо подменить соответствующий вектор в таблице на адрес своей процедуры. После этого,
при вызове подмененного прерывания будет вызываться пользовательская программа.
Если в конце новой процедуры обработки прерывания вызвать стандартную программу обработки, то получится, что программист перехватывает прерывание, выполняет
свои задачи и затем вызывает стандартное прерывание. На этом принципе, например, построена работа программ переключения раскладки клавиатуры, некоторых резидентных
программ, антивирусных программ и т.д.
Для получения стандартного вектора можно либо прочитать адреса напрямую из памяти, либо использовать специальные функции прерывания 21h (функции 25h и 35h). В
некоторых операционных системах прямая запись и прямое чтение области векторов пре34
рываний не желательны, так как это может привести к зависанию системы.
Ниже приведены различные варианты перехвата векторов прерываний.
1. Используется только пользовательская программа обработки прерывания.
В этом случае новый обработчик завершается командой iret. При программировании
аппаратных прерываний перед iret необходимо записать две команды, при выполнении
которых сбрасываются флаги запрещения выполнения аппаратных прерываний более низкого уровня приоритета (если пишется обработчик прерывания уровней 8..15, то добавляется третья команда, выполняющая те же действия для второго микроконтроллера):
1) mоv al,20h
2) out 20h,al
3) out A0h,al
2. Пользовательская программа выполняет предобработку прерывания и передает
управление уже имеющейся стандартной программе обработки (см. рис. 7).
Вызов стандартного обработчика прерываний после нового.
В этом случае пользователь, записывая адрес своей программы в область векторов
прерываний, должен сохранить старое значение адреса в своей программе и после выполнения необходимых действий передать по нему управление:
jmp far CS:old_adress
Следовательно, команда iret в программе пользователя в этом случае отсутствует,
т.к. она есть в стандартной процедуре обработки прерывания
3. Пользовательская программа вызывает старый обработчик прерываний из себя
(см. рис. 8). В этом случае необходимо согласовать возврат управления из старого обработчика прерываний по IRET и в завершении выдать свой собственный IRET:
pushf
; сохранение PSW в стеке
call far CS:old_adress
; вызов стандартного обработчика
………
iret
Вызов старого обработчика прерываний из нового.
Согласование возврата по iret выполняется за счет помещения в стек содержимого
регистра флагов перед вызовом старого обработчика прерывания. Таким образом, в стеке
оказываются значения PSW, СS и адрес следующей команды. При выполнении IRET старого обработчика эти значения восстанавливаются во флажковый регистр, CS и IP, и про35
должается выполнение пользовательской программы обработки прерывания.
Примечание. При желании можно использовать более сложный способ подключения
пользовательской обработки, не требующий изменения соответствующего
вектора. В этом случае, часть оригинального кода в теле стандартного обработчика прерываний вырезается. На освободившееся место подставляется такой же по размеру код пользователя, содержащий в себе вызов основного тела
пользовательской программы. В основную программу пользователя вклеивается и вырезанный участок оригинального кода обработчика прерываний. Получив управление, новый обработчик выполняет необходимые операции, затем выполняет скопированные команды и возвращает управление старому
обработчику. Данный метод получил название «врезка» и в основном используется в вирусах и антивирусах.
При написании обработчиков прерываний следует иметь в виду, что при прерывании
автоматически выдается команда cli, устанавливающая в 0 флаг ip флажкового регистра,
т.е. запрещающая маскируемые прерывания. Поэтому, если обработчик не меняет область
векторов прерываний и не содержит фрагментов, выполнение которых жестко рассчитано
по времени, получив управление желательно выдать команду sti, разрешив, таким образом, остальные прерывания.
Создатели операционных систем (ОС) резервируют прерывания номер 20h-3Fh
для использования внутри ОС. Большинство из этих прерываний полезны только для системы. Однако, прерывание 21h предоставляет пользователю множество удобных возможностей взаимодействия с клавиатурой, дисплеем, принтером, диском и асинхронным
последовательным устройством (см. прил. 1). В данной работе изучаются функции для
работы с клавиатурой и дисплеем, инициируемые прерыванием типа 21h
Для вывода строки символов на экран часто используется функция 09h прерывания
21h. Регистры ds:dx должны содержать адрес строки, которая ОБЯЗАТЕЛЬНО должна заканчивается символом ‘$’. Например:
………
; в сегменте данных
str db 'Введите исходные данные:','$'
………
; в сегменте кода
mov ah,09
lea dx,str
int 21h
При выводе на экран допускается использовать некоторые специальные символы
(возврат каретки, перевод строки, табуляция, звонок и т.д.) Эти символы имеют следующие ASCII-коды
Обозн.
Десятичные коды
Шестнадцатиричные коды
Возврат каретки
CR
13
0Dh
Перевод строки
LF
10
0Ah
Табуляция
TAB
09
09h
Звонок
Beep
07
07h
Пример.
str db 'Введите исходные данные',13,10,'$'
В первом примере после вывода строки курсор останется после последнего выведенного символа, во втором – перейдет на следующую строку.
Задания
Напишите диалоговую программу с использованием функций для работы с клави36
атурой и функций для работы с дисплеем, выполняющую задание указанного варианта.
1) Подсчитать количество вхождений заданного символа в строку текста.
2) Заменить заданный символ в строке текста на указанный новый символ.
3) Удалить заданный символ из текста.
4) Подсчитать количество слов в строке,
довательность знаков между пробелами.
считая словом после-
5) Переместить заданный символ, если он содержится в строке, в начало
строки.
6) Переместить заданный символ, если он находится в строке, в конец
строки.
7) Удалить все пробелы из строки символов.
8) Задана строка слов. Словом считается последовательность символов,
разделенная пробелами:
а) в исходной строке оставить между словами лишь по одному пробелу,
удалив лишние;
б) в исходной строке изменить порядок следования слов наоборот;
в) из исходной строки удалить слова, начинающиеся с заданного символа;
г) в исходной строке слова, начинающиеся с заданной буквы, заменить
знаком &;
д) из исходной строки удалить слова, содержащие хотя бы одну десятичную
цифру.
Контрольные вопросы
1. Что такое прерывание.
2. Что такое вектор прерывания.
3. Какие функции выполняет прерывание типа 21h.
4. Какие функции для работы с клавиатурой имеются в прерывании 21h.
5. Какие функции для работы с дисплеем имеются в прерывании 21h.
Самостоятельная работа №3 Резидентные программы
Цель работы:
Изучить принципы построения резидентных программ, механизм загрузки и выгрузки TSR-программ.
Информационные материалы к занятию
В большинстве случаев пользовательские обработчики прерываний необходимо резидентно сохранять в памяти в течение всего сеанса времени работы ПЭВМ. Общая схема
работы в этом случае выглядит следующим образом. Сначала запускается специальная
программа – инсталлятор, которая содержит программу-обработчик и специальную
часть, выполняющую корректировку нужного вектора прерывания. Инсталлятор завершает свою работу без удаления программы-обработчика из памяти. Затем работают программы, использующие данный обработчик. Для удаления пользовательского обработчика
37
прерывания из памяти обычно используется перезагрузка.
Ниже приводятся структуры инсталляторов EXE-файлов.
; резидент
user proc far
<обработка>
iret
finish equ $
endp
………
; инсталлятор
set_up proc near
push DS
xor AX,AX
push AX
mov DX,offset user
mov AX,seg user
mov DS,AX
mov AL,<номер прерывания>
mov AH,25H
int 21H
mov DX,finish+100H
inc dx
int 27h
ret
При инсталляции EXE-файлов, определяя размер резидентной части, приходится
учитывать размер области PSP (100h) (см. рис. ***), так как адрес finish считается относительно СS и не учитывает PSP.
Структура программ инсталляции а) COM-файла, б) EXE-файла.
Пример 1. Резидентный обработчик прерывания int 1Сh. Через каждые 10 обращений к таймеру выводит напрямую в видеопамять символ ASCII. Резидент загружается из
COM-файла.
code segment byte public
org 100h
assume cs:code,ds:code
begin:
jmp start
tik db 0
; счетчик “тиков”
nch db 0
; номер символа из таблицы ASCII
; резидентный обработчик
process:
cli
38
inc tik
; увеличение счетчика тиков на 1
cmp tik,10
; есть 10 тиков ?
jl a1
; если нет, то переход на завершение push ES
push AX
mov AX,0b800h
; запись адреса видеобуфера
mov ES,AX
; в сегментный регистр ES
mov tik,0
; обнуление счетчика тиков
inc nch
; переход к следующему символу таблицы
mov AL,nch
mov ES:[0],AL
; вывод символа
mov ES:[1],1еН
; вывод атрибута
pop AX
pop ES
a1:
sti
iret
; инсталлятор
start:
mov AX,251cH
; запись адреса обработчика в
lea DX,process
; область векторов
int 21H
; прерываний
lea DX,start
; выход с сохранением программы
int 27H
; обработки в памяти
code ends
end
Пример 2. Резидентный перехватчик прерывания int 9H. Обнаруживает одновременное нажатие клавиш <Ctrl+Alt+Home> и устанавливает режим «озвучания» нажатия
клавиш. При повторном нажатии той же комбинации сбрасывает режим «озвучания». После выполнения всех операций возвращает управление старому обработчику прерывания.
Резидент загружается из COM-файла. При загрузке адреса в область векторов прерываний
используется «прямая» запись без использования функции DOS. При передаче управления
старому обработчику используется машинный код команды jmp и следующее за ним поле, где был размещен адрес старого обработчика прерывания.
title prer
code segment
assume CS:code
org 100h
start:
jmp init
; резидентный обработчик
tsr_9:
push AX
in AL,60H
; читаем scan-код из порта 60H
push BX
push CX
push DX
push DS
cmp AL,47H
; код клавиши <Home>?
jne check
; по “нет” переход на обработку
xor BX,BX
; загрузка байта
mov DS,BX
; состояния
mov AL,DS:[0417H]
; клавиатуры
39
mov AH,AL
and AL,0Ch
cmp AL,0Ch
jne check
xor byte ptr СS:flag,1
check:
cmp byte ptr CS:flag,0
je exit
mov DX,800
in AL,61H ;
and AL,0Feh
n_cycl:
or AL,2
out 61H,AL
mov CX,150
cycl_u:
loop cycl_u
and AL,0fdH
out 61H,AL
mov CX,150
cycl_d:
loop cycl_d
dec DX
jnz n_cycl
exit:
pop DS
pop DX
pop CX
pop BX
pop AX
db 0Eah
original dw ?
dw ?
flag db 0
mes db 'tsr:',0Ah,0Dh,24h
; инсталлятор
init:
push ES
mov AX,3509H
int 21H
mov original,BX
mov original+2,ES
pop ES
xor AX,AX
mov DS,AX
lea AX,tsr_9
cli
mov DS:[0024H],AX
mov DS:[0026H],CS
sti
push CS
pop DS
; сохранение байта состояния
; проверка на нажатие <Ctrl+Alt>
; по “нет” переход на обработку
; установка/сброс режима “озвучания”
; режим “озвучания” включен?
; по “нет” переход на конец
;
;программа
;
;
;озвучания
;
;
;нажатия
;
;
;клавиши
;
; Передаем упр. родному обработчику
; адрес старого обработчика
; 9-го прерывания
; флаг режима "озвучания”
; сообщение о загрузке резидента
; получение
; старого значения
; вектора 9-го прерывания
; сохранение этого вектора
; в “теле” обработчика
; “прямая” запись
; нового адреса в
; область
; векторов
; прерываний
;
;
; выдача сообщения
;
40
lea DX,mes
; загрузке
mov AH,9
; в память
int 21H
; резидента
lea DX,init
; завершение и выход с сохранением
int 27H
; обработчика прерываний в памяти
code ends
end
Достаточно часто от резидентной программы требуется, чтобы она могла определить
свое наличие в памяти для предотвращения повторной загрузки.
Существует множество вариантов решения этой задачи. Как правило, используются
следующие методы:
Сигнатуры в памяти. При инсталляции программы в некоторое место памяти пишется специальная сигнатура, по наличию которой в дальнейшем и определяют наличие
резидента. Проблема заключается в том, чтобы найти такое место, где сигнатура не мешала бы нормальной работе. В качестве кандидата на такое место можно рассматривать: неиспользуемые вектора прерываний, область данных BIOS и т.п. Однако на практике найти
такое место достаточно сложно, и нет никаких гарантий, что оно не будет использоваться
другими программами.
Сигнатура в тексте резидента непосредственно перед обработчиком прерывания.
В этом случае достаточно проверить 1-2 байта, расположенных по адресу перед считанным из вектора, и наличие данного резидента будет установлено. К сожалению, данный
способ не работает, если после установки резидента прерывание было перехвачено другой
программой, даже, если сама обработка прерывания выполняется.
“Магические” числа в дополнительных обработчиках прерываний. Перед тем как
оставить резидент в памяти программа инсталляции обращается к некоторому прерыванию с определенным “магическим” числом. Если существует резидентная копия обработчика, то она перехватывает это прерывание и отвечает другим заранее определенным “магическим” числом. Получив ответ, программа инсталляции завершает работу без сохранения резидента в памяти. Если получен любой другой ответ, программа инсталлируется.
Поскольку обработчик дополнительного прерывания находится в одном модуле с обработчиком основного прерывания, появляется возможность изменения параметров резидентной программы (см. Пример 1 ниже). Метод не работает при полном перехвате дополнительного прерывания другой программой.
Использование мультиплексного прерывания DOS (int 2FH). Данное прерывание используется системой для связи с собственными резидентными процессами. При его вызове в регистре AH задается номер функции (номер резидентного процесса), а в регистре
AL- номер подфункции. Функции с номерами от 00H до BFH зарезервированы для использования системой, а функции с C0H по FFH могут использоваться прикладными программами. При инсталляции обработчику присваивается оригинальный мультиплексный
номер, по наличию которого в системе и определяется присутствие данного резидента.
Естественно, гарантии, что другой резидент не использует тот же номер, нет. Так же как и
в предыдущем случае, резидент должен включать дополнительный обработчик прерывания (int 2FH), который, помимо предотвращения повторной загрузки, может использоваться для связи с резидентным процессом, например, для передачи ему параметров. Далее в приводится пример использования данного метода.
Запись сигнатуры в PSP резидента. При попытке повторной загрузки инсталлятор
проверяет PSP всех загруженных программ. Для этого используется функция DOS 52Н,
которая позволяет получать сегментные адреса управляющих блоков памяти (MCB)[2].
Метод дает полную гарантию, но относительно сложен.
Пример 1. Резидентный “замедлитель”. Программа используется для замедления
работы быстрых компьютеров. Она перехватывает прерывание BIOS int 08(таймер) и запускает в его обработчике цикл, состоящий из переменного числа сложений. Также она
41
обнаруживает свое присутствие в памяти при повторной загрузке и позволяет изменять
количество циклов в уже загруженной копии. Для этого она перехватывает зарезервированное DOS-прерывание 3Ah и использует технику работы с "магическими" числами.
{$M 1024,0,0}
Program SlowDown;
Uses DOS;
Const {“магические” числа}
check=$FFC5;
answer=$FFCF;
ask=$FFC4;
change=$FFC3;
disable=$FFC2;
Type
overlap=record
{разбиение длинного целого на слова для передачи
через регистры}
first:word;
second:word
end;
Var i,N,NN,f2:longint;
code:integer;
stroka:string;
Int8:procedure; {Адрес старого обработчика прерыв.}
r:registers;
Work:boolean;
{Признак рабочего состояния резидента}
over:overlap absolute N; {Наложение двух слов на дл. целое}
{$F+}
{обработчики прерываний}
{int 08-таймер}
Procedure Cicle(Flags,CS,IP,AX,BX,CX,DX,SI,DI,ES,DS,BP:word);interrupt;
Begin
Inline($9C);
Int8;
if Work then for i:=1 to N do inc(f2);
end;
{int 3ah - неиспользуемое DOS прерывание}
Procedure Inst(Flags,CS,IP,AX,BX,CX,DX,SI,DI,ES,DS,BP:word);interrupt;
Begin
case CX of
check:CX:=answer;{подтверждение наличия в памяти}
ask:begin
{сообщить количество циклов}
AX:=over.first;
BX:=over.second;
end;
change:begin
{изменить количество циклов}
Work:=true;
over.first:=AX;
over.second:=BX;
end;
disable:Work:=false; {отключить работу}
end;{case}
end;
{$F-}
Begin {начало программы-инсталлятора}
42
Writeln(' SlowDown. Demo version 2.2’);
if ParamCount=1
then {прочитать данные из командной строки}
begin
stroka:=ParamStr(1);
Val(stroka,NN,code);
if code<>0
then {неверный ввод}
begin
Writeln('Number please');
Halt(1);
end
else
if NN=0 then Work:=false else Work:=true;
end
else {не задано число циклов}
begin
Writeln('Format:slow.exe number_of_circles');
Halt(1)
end;
r.CX:=check; {проверить наличие обработчика в памяти}
Intr($3a,r);
if r.CX=answer then
begin {обработчик уже резидентен}
r.CX:=ask;
{запросить параметры в памяти}
Intr($3a,r);
over.first:=r.AX;
over.second:=r.BX;
Writeln('Already installed. Number of circles-',N);
N:=NN;
{ изменить число циклов}
r.CX:=change;
r.AX:=over.first;
r.BX:=over.second;
Intr($3a,r);
if Work
then Writeln('New Number of circles-',N)
else
begin
{или отключить работу}
r.CX:=disable;
Intr($3a,r);
Writeln('Slowing is off');
end
end
else
begin {установка векторов прерываний и сохранение}
N:=NN;
Writeln('Installed...');
SwapVectors;
GetIntVec($8,@Int8);
SetIntVec($3a,@Inst);
SetIntVec($8,@Cicle);
Keep(0);
43
end
end.
На рисунке условно показано взаимодействие двух копий обработчика прерываний:
резидентной и только что загруженной через дополнительное прерывание. При этом
инсталлятор новой копии программы обращается к прерыванию int 3Ah для определения
загружена ли программа, для определения количества циклов в загруженной копии, для
изменения количества циклов в загруженной копии и для отключения работы обработчика
прерывания int 8. Обмен данными между инсталлятором и резидентным обработчиком int
3Ah производится через регистры общего назначения.
Взаимодействие двух копий обработчика через дополнительное прерывание и
регистры микропроцессора.
Удаление резидентного обработчика прерывания из памяти.
Все рассмотренные выше резидентные программы не обеспечивают возможности
выгрузки из памяти, и единственная возможность освободить занимаемую ими память перезагрузка машины. На практике же большинство серьезных резидентных программ
имеют встроенные средства выгрузки.
Выгрузка резидентного обработчика прерывания из памяти выполняется в два этапа:
сначала необходимо восстановить вектор прерывания, а затем освободить память, занимаемую резидентом. Причем, прежде чем восстанавливать вектор необходимо убедиться,
что никакая другая программа не захватила данное прерывание и не вызывает наш обработчик в качестве “старого”. Удаление обработчика в таком случае, скорее всего, приведет к “зависанию” машины. Достаточно надежно можно удалить лишь последний загруженный резидент.
Инициатором процесса выгрузки может служить запуск специальной выгружающей
программы. Удобнее всего в качестве выгружающей программы использовать саму резидентную программу, которая при повторном запуске должна получить доступ к первой
копии и выгрузить ее. Так же как при передаче параметров доступ к первой копии можно
осуществить через перехват дополнительных прерываний (int 2fH или любого другого
свободного прерывания).
Пример 1. “Самовыгружающийся” резидентный обработчик прерывания int 1cH.
При запуске программы без параметра происходит проверка повторной загрузки обработчика и инсталляции его, если он не был инсталлирован ранее. Запуск с параметром “off”
приводит к выгрузке обработчика. В качестве дополнительно перехватываемого прерывания используется прерывание int 2fH. Обработчик этого прерывания использует номер
0с8Н для идентификации резидентного процесса и выполняет две подфункции: 0 - проверка повторной загрузки и 1 - выгрузка резидента. Обработчик основного прерывания int
1Ch каждые десять тиков таймера выводит на экран символы ASCII.
text segment 'code' public byte
44
assume CS:text,DS:text
org 256
main proc
jmp init
old_2fh dd 0 ; старое значение вектора прерывания int 2fH
old_1ch dd 0 ; старое значение вектора прерывания int 1сH
; обработчик int 2fH
new_2fh proc
cmp AH,0c8H
jne out_2fh
cmp AL,00H ; если проверка загрузки резидента
je inst ; то выдать в AL специальный код
cmp AL,01h ; если выгрузка
je uninstalled ; то перейти к выгрузке
jmp short out_2fh ; иначе - передать управление старому обработчику
inst: mov AL,0ffH
iret
out_2fh:
jmp CS:old_2fh
uninstalled:
push DS
push ES
push DX
mov AX,251cH ; восстановить
lds DX,CS:old_1ch ; старые
int 21H ; адреса
mov AX,252fH ; обработчиков
lds DX,CS:old_2fh ; прерываний
int 21H ; в области векторов
mov ES,CS:2cH ; освободить
mov AH,49H ; область, занимаемую
int 21H ; окружением DOS (адрес из PSP)
push CS ; освободить
pop ES ; область,
mov AH,49H ; занимаемую
int 21H ; программой
pop DX
pop ES
pop DS
iret
new_2fh endp
; обработчик int 1cH
new_1ch proc ;основной обработчик: используя таймер пишет в видеопамять
cli ; коды символов ASCII
inc CS:tik
cmp CS:tik,10
jl a1
push ES
push AX
mov AX,0b800H
mov ES,AX
xor AL,AL
45
mov CS:tik,al
inc CS:nch
mov AL,CS:nch
mov ES:[0],AL
mov AL,1eH
mov ES:[1],AL
pop AX
pop ES
a1: sti
push AX
pop AX
iret
tik db ?
nch db 0
new_1ch endp
main endp
end_rez=$ ; адрес конца резидентной части
tail db 'off' ; значение параметра, означающего выгрузку резидента
flag db 0 ; флаг выгрузки
init proc ; инсталлятор
mov CL,ES:80H ; длина области параметров из PSP
cmp CL,0 ; если нет параметров
je ahead ; то проверяем загружен ли резидент
xor CH,CH ; иначе формируем счетчик CX
mov DI,81H ; заносим в DI смещение строки параметров
mov SI,offset tail ; заносим в SI смещение “правильного” параметра
mov AL,' ' ; организует
repe scasb ; пропуск всех
dec DI ; пробелов и
mov CX,3 ; проверяем значение
repe cmpsb ; параметра
jne ahead ; если не “off”, то переходим к проверке повторной загрузки
inc flag ; иначе - установим флаг выгрузки
ahead: mov AH,0c8H ; обращаемся к п/функции
mov AL,0 ; определения повторной загрузки
int 2fH ; прерывания int 2fH
cmp AL,0ffH ; если ответ=ожидаемому
je installed ; то переходим к выдаче сообщения о повторной загрузке
mov AX,352fH ; иначе - сохраняем старые
int 21H ; значения векторов прерыmov word ptr old_2fh,BX ; ваний int 2fH и int 1cH и
mov word ptr old_2fh+2,ES ; записываем туда адреса
mov AX,351cH ; своих обработчиков
int 21H ;
mov word ptr old_1ch,BX ;
mov word ptr old_1ch+2,ES ;
mov AX,252fH ;
mov DX,offset new_2fh ;
int 21H ;
mov AX,251cH ;
mov DX,offset new_1ch ;
int 21H ;
46
mov AH,09H ; печатаем сообщение о
mov DX,offset mes ; загрузке резидента
int 21H ;
mov AX,3100H ; выходим, сохранив в
mov DX,(end_rez-main+100H+0fH)/16 ; памяти резидентную
int 21H ; часть программы
installed:
cmp flag,1 ; если необходимо выгрузить программу
je unins ; то переходим на выгрузку
mov AH,09H ; иначе - выдаем сообщение о том
mov DX,offset mes1 ; что программа уже
int 21H ; загружена в память
mov AX,4c01H ; и выходим без
int 21H ; сохранения в памяти
unins: mov AX,0c801H ; обращаемся п/функции удаления
int 2fH ; прерывания int 2fH
mov AH,09H ; выдаем сообщение
mov DX,offset mes2 ; о выгрузке программы
int 21H ; из памяти
mov AX,4c00H ; и выходим без
int 21H ; сохранения в памяти
mes db 'Программа загружена',10,13,'$'
mes1 db 'Программа уже загружена',10,13,'$'
mes2 db 'Программа выгружена из памяти',10,13,'$'
init endp
text ends
end main
Программа использует параметр, задаваемый в командной строке при ее запуске.
Доступ к параметрам командной строки осуществляется через область PSP, по адресу 80Н
в которой записывается длина строки параметров, а начиная с адреса 81Н располагаются
сами параметры.
Предотвращение зависания при использовании функций DOS.
К сожалению, функции DOS не являются повторно входимыми, и в том случае, когда при работе обработчиков прерываний, использующих данные функции, происходит их
прерывание, во время которого происходит обращение к другим функциям DOS, машина,
как правило, “зависает”. Это связано с тем, что диспетчер функций DOS хранит только
один адрес возврата для функций одного типа, и после завершения выполнения второй
функции того же типа не может вернуться и завершить выполнение первой функции.
Тип функции DOS определяется используемым стеком. Всего функции DOS использует три варианта стека: стек ввода-вывода (функции с номерами от01Н до 0сН), дисковый стек (функции с номерами 00Н и от 0dH до 6сН) и стек пользовательской программы.
Таким образом, при разработке обработчиков прерываний использование функций
DOS не желательно, и, по возможности, их следует заменять функциями BIOS. В тех же
случаях, когда такой возможности нет, для предотвращения повторного вызова функции
DOS можно использовать специальный флаг операционной системы, адрес которого сообщает функция 0x34 прерывания int 21H.
Пример 1. Часы, звонящие каждые 5 секунд. При разработке программы используется прерывание int 1cH, вызываемое при каждом “тике” таймера после int 8H. Обработчик отслеживает частоту и длительность каждого звука исполняемой мелодии. Для
предотвращения нарушения работы системы при использовании функции DOS в обработчике прерывания программа получает адрес флага занятости DOS (см. функцию playback)
при подключении и, прежде чем обратиться к функции DOS при отключении, определяет,
47
не выполняется ли какая-нибудь другая функция DOS в системе (см. функцию nextTone).
Самостоятельная работа №4 Работа с дисковыми накопителями. Организация
FAT
Цель работы
Познакомиться со способами размещения данных на магнитном носителе. Изучить
принцип построения каталога, таблицы FAT. Научиться считывать данные с диска.
Информационные материалы к занятию
Все диски, как гибкие, так и жесткие, организованы одинаковым образом. Поверхность диска разделена на ряд концентрических колец, называемых дорожками. Дорожки
радиально делятся на сектора. Файл распределен по такому количеству секторов, которое
необходимо, чтобы вместить его. Только несколько секторов на внешнем ободе дискеты
зарезервированы для специальных нужд, остальные доступны. По мере заполнения диска
данными сектора постепенно заполняются по направлению к центру диска. При уничтожении файла сектора освобождаются и со временем свободные области становятся разбросанными по диску, разбивая новые файлы и замедляя доступ к ним для чтения и записи.
Жесткие диски состоят из нескольких параллельных пластин, у каждой из которых
есть две головки, чтобы одновременно читать обе стороны. Дорожки, расположенные на
всех пластинах на одинаковом расстоянии от центра, вместе называются цилиндром. Поскольку головки всех дисков двигаются тандемом, то достигается экономия перемещений,
если заполнять все дорожки одного цилиндра, прежде чем переходить к следующему.
Для дискет первый сектор (дорожка 0, сектор 1) содержит запись начальной загрузки. Затем идут две копии таблицы размещения файлов, которые содержат информацию о
распределении дискового пространства. Затем идет корневой каталог, который содержит
список файлов и ссылок на подкаталоги, а также указывает, в каком месте диска они
начинаются.
Жесткие диски имеют главную запись загрузки (MBR), которая содержит таблицу
разделов, позволяющую разделить диск между несколькими операционными системами.
Для хранения информации о состоянии диска, используется таблицу размещения
файлов (FAT). Из соображений безопасности на всех дисках хранятся две копии FAT. Они
хранятся последовательно, в секторах с самыми младшими доступными логическими номерами, начиная со стороны 0, дорожки 0, сектора 2 (сектор 1 также занят записью
начальной загрузки). Число секторов, занимаемых FAT, определяется размером и типом
диска.
Таблица размещения файлов построена в виде списка. Она хранит информацию о
каждом кластере секторов на диске. Кластер это группа стандартных секторов (у дискет
размер сектора 512 байт). Кластер – это минимально доступный объем данных на диске.
Например, файл autoexec.bat, размером 45 байт будет занимать один кластер – т.е. 512
байт дискового пространства. Кластеры используются для уменьшения размера FAT и повышения скорости доступа к накопителю. В связи с этим, чем больше размер кластера,
тем быстрее работает накопитель, меньше размер таблицы FAT. Однако, при этом, дисковое пространство используется менее эффективно.
Номер кластера содержит 3 шестнадцатиричные цифры, для хранения которых требуется 1½ байта. Для уменьшения размеров FAT номера для двух соседних кластеров
хранятся в трех последовательных байтах таблицы. Операционная система автоматически
производит все необходимые вычисления для извлечения нужной информации из записи
таблицы.
Первые три байта FAT не используются для номеров кластеров. Первый байт содержит код, определяющий тип диска (для дискеты F0h), а следующие 2 байта равны FFh.
48
Поскольку эти позиции таблицы заняты, то кластеры нумеруются, начиная с 2, причем
кластеры 2 и 3 занимают вторую тройку байт таблицы (рис 10).
Каждая позиция в таблице размещения файлов соответствует определенному кластеру на диске. Как правило, файл занимает несколько кластеров. Запись в каталоге файлов содержит номер стартового кластера, в котором записано начало файла. Как корневой
каталог, так и все подкаталоги используют 32 байта для хранения информации, независимо от типа диска. В каждой записи может храниться информация о 16 элементах каталога.
Каждое 32-байтовое поле разбито следующим образом:
Байты
Назначение
0…7 Имя файла (подкаталога)
8…10 Расширение файла (подкаталога)
11 Атрибут файла (подкаталога)
12…21 Зарезервировано под ОС
22…23 Время последнего доступа к файлу (подкаталогу)
24…25 Дата последнего доступа к файлу (подкаталогу)
26…27 Начальный кластер
28…31 Размер файла
Просмотрев позицию FAT, соответствующую первому кластеру, ОС находит номер
кластера, в котором хранится следующая часть этого файла. Этому кластеру соответствует
своя запись в FAT, которая в свою очередь содержит номер следующего кластера в цепочке. Для последнего кластера, занятого файлом FAT содержит значения от 0FF8h до
0FFFh. Неиспользуемым (или освобожденным) кластерам записывается значение 000, а
плохим секторам – 0FF7h. Наконец, значения от 0FF0h до 0FF7h приписываются резервным кластерам.
Рассмотрим пример, в котором выполняется загрузка исполняемого файла, созданного в лабораторной работе #1 (размер файла примерно 833 Байта). Файл такого размера
размещается в двух кластерах на диске (см. рис. 10).
Прочитав запись каталога, находим, что номер первого кластера с файлом – 002.
Находим на диске этот кластер (действие 1 на рисунке), считываем его и заносим в буфер
(действие 2). Затем читаем содержимое второго кластера таблицы FAT. Там стоит значение 003. Это означает, что следующий блок файла находится на диске в кластере #003.
Переходим к кластеру #003 таблицы FAT (действие 3). Находим на диске кластер #003
(действие 4), считываем с диска кластер #003 и добавляем его в буфер к первому блоку
(действие 5). Анализируя содержимое кластера #003 в таблице FAT, обнаружим, что там
стоит признак конца файла (EOF). Зто означает, что нужный файл полностью считан с
накопителя в буфер. Теперь прочитанный файл из буфера переносится в ОЗУ. Итоговый
размер файла (833 байта) записан в одном из полей записи каталога. Поэтому в ОЗУ переносится не 1024 прочитанных байтов, а лишь 883 (лишние данные просто игнорируются).
Таким образом, весь файл переносится с накопителя в ОЗУ.
49
Номер байта
Таблица
Номер кластера
размещения
файлов (FAT) Содержимое кластера
00
01
02
0F0
0FF
0FF
03
002 3
003
05
003
EOF
06
004
000
4
1
004
005
003
Собранный по
частям файл
04
002
2
002
003
5
Схема загрузки файла с накопителя в оперативную память.
Очень редко имеются причины вносить изменения прямо в таблицу размещения
файлов. ОС заботится обо всех файловых операциях и обеспечивает процедуры, анализирующие таблицу на предмет наличия свободного пространства на диске. Однако для некоторых специальных целей, таких как восстановление удаленных файлов или написание
драйвера блочного устройства, необходим прямой доступ к FAT. При прямом доступе к
FAT надо самостоятельно рассчитывать смещения в таблице FAT.
Функция 1Ch прерывания 21h возвращает нформацию о таблице FAT. Для вызова
функции необходимо поместить номер накопителя в dl (0 – накопитель по умолчанию, 1 –
A, 2 – В,…и т.д.) При возврате dx содержит число кластеров в FAT, а cx – число байтов в
секторе. ds:bx указывает на область памяти, куда была помещена копия FAT.
Намного легче получить доступ к FAT в языке ассемблера. Отметим, что умножение
номера кластера на 1.5 производится копированием числа, сдвигом копии вправо на 1 бит
для деления пополам и сложением копии с оригиналом. Этот метод автоматически окгруляет результат вниз.
;---в сегменте данных
buffer db 1024 dup(0)
;отводим место для 2 секторов
;---читаем fat в память
lea bx,buffer
;указываем на буфер данных
mov dx,1
;логический номер сектора
mov cx,2
;2 сектора
mov al,0
;накопитель a
int 25h
;читаем сектора
pop cx
;восстанавливаем стек
;---получаем номер кластера
mov ax,3
;номер кластера в ax
mov cx,ax
;делаем копию
mov dx,ax
;делаем вторую копию
shr dx,1
;делим вторую копию на 2
add cx,dx
;складываем между собой
add bx,cx
;добавляем как смещение
mov dx,[bx]
;получаем 2 байта из этого места
test ax,1
;номер кластера нечетный?
jnz odd_cluster
;уход, если да
and dx,0000111111111111b
;получаем номер
jmp short continue
;уход через обработку нечетного
odd_cluster:
50
mov cl,4
shr dx,cl
continue:
;подготовка к сдвигу вправо
;сдвигаем вниз старшие 12 битов
Программа должна контролировать доступное дисковое пространство и сообщать
пользователя о нехватке места. Если места не хватает, то пользователь может выйти из
программы и устранить проблему без потери информации.
Функция 36h прерывания 21h сообщает, сколько имеется свободного пространства
на диске. Единственный входной регистр dl, который должен содержать номер накопителя. Накопитель по умолчанию обозначается 0, накопитель A - 1 и т.д. При возврате bx содержит число доступных кластеров, ax - число секторов в кластере, а cx - количество байт
в секторе. Небольшое упражнение в умножении дает желаемый результат. В следующем
примере проверяется, что на двухсторонней дискете осталось по меньшей мере 2K дискового пространства:
mov ah,36h
;номер функции
mov dl,1
;накопитель a
int 21h
;получаем информацию
cmp bx,2
;имеется ли 2 свободных кластера?
jl running_out
;если нет, то сообщаем об этом
Для выполнения операций ввода-вывода, необходимо в области данных определить
блок управления данными FCB (File Control Block) со следующей структурой:
Байты
Назначение
0 Указывает дисковод 0 – по умолчанию, 01 – A,02–B ...
1…8 Имя файла, выровненное по левой границе
9…11 Расширение файла, выровненное по левой границе
12, 13 Номер текущего блока (обычно ставится 0000).
14,15 Логический размер записи
16…19 Размер файла
20, 21 Дата создания/изменения файла
22…31 Зарезервировано
32 Текущий номер записи (0…127) в текущем блоке
33…36 Относительный номер записи
Программист должен инициировать байты 0…15 и 32…36. остальные устанавливаются операционной системой.
Для области передачи данных (DTA) обычно выделяют буфер размером 32 байта.
Программа, читающая дисковый файл, должна содержать блок управления файлом,
который определяет файл точно так, как он был создан. Вначале программа использует
функцию 0Fh для открытия файла:
; в сегменте данных
DTA db 32 dup(‘ ‘)
FCB db 01
; дисковод А
db ‘name’
; имя файла
db ‘txt’
; расширение
dw 0000h
; номер текущего блока
dw 0000h
; логический размер записи
dd ?
; размер файла
dw ?
; дата
dt ?
;
db 00
; текущий номер записи
dd ?
; относительный номер записи
51
………
; в сегменте кода
mov ah,0Fh
lea dx,FCB
int 21h
Операция открытия начинается с поиска в оглавлении элемента с именем и типом
файла, определенными в FCB. Если такой элемент не будет найден в оглавлении, то в регистре al устанавливается 0FF. Если элемент найден, то в регистре al устанавливается 00
и в FCB заносится действительный размер файла, дата, а также устанавливается номер текущего блока в 0, длина записи – в 80h. После открытия можно заменить длину записи на
другое значение.
Область DTA должна содержать определение считываемой записи в соответствии с
форматом, который был принят при создании файла. Для установки адреса DTA используется функция 1Аh:
mov ah,1Ah
lea dx,DTA
; адреса DTA
int 21h
Для последовательного чтения записей с диска используется функция 14h:
mov ah,14h
; Последовательное
lea dx,FСB
; чтение записей
int 21h
Чтение записи с диска по адресу DTA осуществляется на основе информации в блоке FCB. Операция чтения устанавливает в регистре al следующие коды возврата (см. прил.
3):
00
Успешное чтение.
01
Конец файла, данные не прочитаны.
02
В DTA нет места для чтения одной записи.
03
Конец файла, прочитана запись, частично заполненная нулями.
Первая операция чтения заносит содержимое всего сектора в буфер ОС. Затем операция определяет из блока FCB размер записи и пересылает первую запись из буфера в
DTA. Последующие операции чтения пересылают остальные записи (если имеются) до
тех пор, пока данные в буфере не будут исчерпаны. После этого операция чтения определяет адрес следующего сектора и заносит его содержимое в буфер.
После успешного завершения операции чтения в блоке FCB автоматически увеличивается номер текущей записи на 1. Завершение последовательного чтения определяется
программой по маркеру конца файла (EOF), для чего в программе имеется соответствующая проверка.
Задания
1. Написать программу, определяющую объем свободного места
на диске.
2. Записать на чистый магнитный диск несколько текстовых
файлов.
3. Написать программу, определяющую объем свободного места
на магнитном носителе.
4. Написать и отладить программу, выполняющую чтение файла
с магнитного диска.
52
Контрольные вопросы
8.
Какую длину в байтах имеет стандартный сектор?
9.
Где расположена запись начальной загрузки?
10. Где и каким образом отображается в таблице FAT, что устройство является гибким диском?
11.
Сколько подходов требуется для считывания файла размером 3880
12.
Имеется файл, размером 289010 байт.
байт?
а) где система хранит размер файла?
б) в каком виде оно хранится в системе?
13. Что такое DTA?
14.
Что такое FCB?
Самостоятельная работа №5 Организация ввода/вывода текстовой и числовой
информации
Цель работы: освоение принципов построения простейших консольных приложений на языке ассемблера для системы MS-DOS, ознакомление с командами и способами
адресации языка ассемблера и правилами построения программ в соответствии со структурным способом программирования.
Основные теоретические положения
Построение COM файлов
СОМ файл является самым простым видом исполняемого файла в системе MS-DOS
и представляет собой точную копию программы в двоичном виде, в каком ее нужно загрузить в память. СОМ файлы не содержат дополнительного префикса. Они не содержат адресных констант, зависимых от адреса загрузки программы в память. Все в программе
представлено как смещение с начала сегмента для кода, включая данные и стек. Следовательно, размер программы не может превышать 64 Кбайтов. Поэтому загрузка СОМ файлов сводится к определению достаточно большого свободного блока памяти, построению
PSP (Program Segment Prefix) и считыванию всего файла в область после PSP.
В области PSP хранится специальная системная информация и информация для программы. Область PSP всегда занимает 256 байт. Содержимое и назначение этой области в
данной лабораторной не рассматриваются.
Регистрам CS, DS, SS и ES присваивается значение сегмента программы (сегментный адрес PSP). Указатель инструкций IP получает значение 100Н. SP получает значение
FFFEH, т.е. конец адресного пространства из 64 Кбайтов используется для стека. Байт по
адресу FFFEH в стеке содержит 00Н, так что после команды RET в конце программы в IP
получается значение 00Н, т.е. выполняется инструкция INT 20H, записанная в начале PSP.
Можно привести следующие практические правила создания COM файлов:
Программа должна начинаться директивой ORG 100Н и входная точка должна быть
в начале программы:
ORG 100
START:
<Тело программы>
END START
53
Так программа соответствует значению CS:IP после ее загрузки - CS содержит сегментный адрес PSP, a IP установлен в значение 100Н. Если нужно начать выполнение с
другого места, первой инструкцией после ORG 100 должна быть JMP.
Не допускается определять отдельные сегменты для данных и для стека. Определяется только сегмент для кода. Используется директива ASSUME, чтобы сопоставить все
сегментные регистры сегменту для кода, например ASSUME CS:CSEG, DS:CSEG,
ES:CSEG, SS:CSEG.
Данные можно располагать в произвольном месте программы, лишь бы не путать их
с кодом. Рекомендуется однако расположить их в начале программы, чтобы не получить
при ассемблировании ошибки при обращении к данным, которые еще не определены
(forward reference). В таком случае программа должна начинаться инструкцией JMP, чтобы передать управление после данных.
Не допускаются инструкции, которые имеют в качестве операндов сегментные адреса, например MOV AX.SEG DATA FIELD1. В частности, в начале программы отсутствует
типичная для EXE файлов последовательность MOV AX.DSEG / MOV DS.AX (не определяется отдельный сегмент для данных).
При загрузке программы SS, как и остальные сегментные регистры, имеет значение
сегментного адреса PSP. SP указывает последний адрес 64-Кбайтового адресного пространства (стек заполняется от старших к младшим адресам). Если нужна программа
меньшего размера, можно изменить SP еще до использования стека.
TITLE TestCom
CODESG SEGMENT PARA 'Code'
; Указание настройки сегментных регистров
ASSUME
CS:COOESG,DS:CODESG,SS:CODESG.ES:CODESG
ORG
100H
;Начало в конце PSР
BEGIN:
JMP
MAIN
;0бход через данные
; Определение данных
VAR_A
DW 259
VAR_B
DW 3
VAR_C
DW ?
MAIN PROC NEAR
;Основное тело программы
MOV
AX , VAR_A
ADD
AX , VAR_B
MOV
VAR_C , AX
;Вернуться в DOS
RET
; Конец процедуры
MAIN ENDP
; Конец сегмента
CODESG ENDS
; Конец программы
END
BEGIN
Пример простейшей COM программы
54
Организация ввода-вывода
При разработке программ на языке ассемблера существуют три основных способа
организации ввода-вывода данных: воспользоваться функциями операционной системы;
воспользоваться функциями, предоставляемыми системой BIOS; непосредственная работа
с аппаратурой для организации ввода-вывода. Каждый из перечисленных способов имеет
свои достоинства и недостатки.
Организация ввода-вывода через системные функции операционной системы наиболее простой и эффективный способ реализации. Обычно набор таких функций достаточно широк и позволяет резко сократить время на разработку программы. Недостаток
такого подхода проявляется к невозможности переноса программного кода в другие операционные системы и невозможность работы в случае ее отсутствия.
Использование базовых функций, предоставляемых BIOS, позволяет исправить этот
недостаток. Для персональных машин BIOS существует всегда, и из него редко выбрасывают модули, связанные с вводом-выводом. Но эти функции реализуют только простейшие конструкции по организации ввода вывода, которые не могут удовлетворить даже достаточно скромные требования к интерфейсу пользователя. Плюс использования функций
BIOS состоит в абстрагировании от конкретной операционной системы и от конкретной
аппаратной реализации устройства, что позволяет сохранить единообразие программы
при переносе на другую операционную систему или реализацию вычислительной машины.
В некоторых случаях, когда использование BIOS невозможно, либо необходимо
осуществлять ввод-вывод через неподдерживаемое им оборудование, используется метод
непосредственной работы с аппаратурой. Это наиболее сложный вариант организации
ввода-вывода, поскольку необходимо четко представлять архитектуру вычислительной
машины, ее схемотехнику и принципы организации взаимодействия со специализированными устройствами. В данной лабораторной работе данный способ ввода-вывода не рассматривается.
Для обращения к функциям BIOS и операционной системы MS-DOS используется
механизм программных прерываний, программа заполняет регистры нужными значениями и вызывается прерывание с помощью команды INT.
Использование именно такого подхода объясняется следующим. Функции вводавывода – набор процедур различных процедур. При компиляции программы невозможно
узнать в какой области памяти будут находиться данные процедуры, а именно механизм
прерываний позволяет абстрагироваться от конкретных физических адресов реализации.
Дело в том, что обработчик прерывания - это специальная процедура, адрес которой располагается в специальной таблице векторов прерываний. Вызов процедуры производится
не по адресу, а по номеру вектора прерывания (строки в таблице прерываний). Ответственность за заполнение таблицы несут BIOS и операционная система, что позволяет
программисту не задумываться об этом. Более того, данный механизм обеспечивает возможность перекрытия и дополнения базовых функций, благодаря изменению обработчика
прерываний, и программный код резко сокращается, так как команда INT занимает меньше памяти, чем другие команды передачи управления.
Рассмотрим базовые функции ввода-вывода системы MS-DOS. Доступ к этим функциям, как и ко всем функциям системы MS-DOS, осуществляется с помощью вектора прерываний с номером 21h.
Фукции для чтения с клавиатуры различаются главным образом по трем признакам:
ожидают ли ввод или возвращают информацию, что нет наличного символа; выводят ли
после чтения символ на экран или нет (с эхо или без эхо); проверяется ли при их выполнении наличие Ctrl-Break или нет.
Функция 01Н. Ввод с клавиатуры с эхо
Входные данные:
АН
01Н
Выходные данные: AL
Символ со стандартного Входного устройства
55
Функция ожидает ввод со стандартного входного устройства. Если получен ASCII
символ, он выводится на стандартное выходное устройство и записывается в AL. Если после выполнения функции AL содержит 00h, это означает, что получен расширенный
ASCII код, второй байт которого будет прочитан при следующем выполнении функции.
При выполнении функции осуществляется проверка наличия Ctrl-Break.
Функция 01Н. Прямой ввод-вывод на консоль
ПРИМЕЧАНИЕ. Термин консоль объединяет стандартное
входное и стандартное выходное устройство и используется как общее для
клавиатуры и экрана имя.
Входные данные:
АН
06Н
DL
FFH для ввода с консоли,00h-FEh для вывода на консоль
Выходные данные: AL
Функция выполняет как ввод, так и вывод на консоль. Регистр AL используется для
ввода, а регистр DL - для вывода. Если DL содержит FFh, выполняется ввод, и AL готов
принять входной символ. Состояние ZF(Zero Flag) показывает наличие символа. Если ZF
содержит 1, нет символа и значение AL несущественно. Если ZF содержит 0, имеется
символ, и он записывается в AL. Если значение DL различно от FFh, выполняется вывод.
DL содержит ASCII код символа.
Как и остальные функции, рассмотренные здесь, функция 06Н работает со стандартным входным и стандартным выходным устройством. Функция не ожидает появления
входного символа, читает без эхо и при ее выполнении не проверяется наличие Ctrl-Break.
Функция 07Н. Прямой ввод с клавиатуры без эхо
Функция аналогична функции 01Н с той разницей, что работает без эхо и при ее выполнении не проверяется наличие Ctrl-Break.
Функция 08Н. Ввод с клавиатуры без эхо
Функция аналогична функции 01Н с той разницей, что работает без эхо.
Функция 0АН. Буферированный ввод с клавиатуры
Входные данные:
АН
0Аh
DS:DX
Адрес Входного буфера
Функция дает возможность использовать в программе стандартные клавиши DOS
для редактирования командной строки. В отличие от остальных функций, конечный результат представляет собой не единичный символ, а цепочка, которая получается в буфере
ввода после нажатия Enter (или после получения символа 00h от стандартного входного
устройства).
Перед выполнением функции первый байт входного буфера должен содержать его
длину, обязательно отличную от 0. Точнее, это максимальное количество символов, которые могут быть обработаны. Буфер заполняется, начиная с третьего байта, причем последний символ - ODH (CR). Функция помещает во второй байт буфера действительную
длину полученной строки без символа 0Dh.
Максимальное количество символов, которое можно поместить в буфер, на единицу
меньше значения его первого байта - одна позиция резервирована для символа ОDh. При
превышении этого максимума DOS игнорирует дальнейший ввод и выдает звуковой сигнал при вводе каждого последующего символа. Во время ввода (до нажатия Enter) можно
использовать редактирующие клавиши DOS. При выполнении функции проверяется
наличие Ctrl-Break.
Функция ОВН. Проверка входного статуса клавиатуры
Входные данные:
АН
0Вh
Выходные данные:
AL
FFh, если есть готовый символ на стандартном входном устройстве и 00h,
если на стандартном входном устройстве нет символа.
Функция проверяет наличие символа на стандартном входном устройстве. При вы56
полнении функции проверяется наличие Ctrl-Break.
Функция 0СН. Стирание буфера клавиатуры плюс функция 01Н, 06Н, 07Н, 08Н или
0АН
Входные данные
АН
0Сh
AL
Номер функции
Функция стирает буфер клавиатурного драйвера BIOS, после чего выполняет указанную в AL функцию (допустимы только 01Н, 06Н, 07Н, 08Н и 0АН). При выполнении
функции проверяется наличие Ctrl-Break.
Функция 02Н. Вывод на экран
Входные данные
АН
02Н
DL
Символ
Символ из DL выводится на стандартное выходное устройство. Функция реагирует
на управляющие ASCII символы, такие как 0DH (CR) и 0АН (LF). Если символ в DL равен
08Н (управляющий символ BS - символ назад), курсор возвращается на одну позицию
влево без удаления последнего символа.
Функция 09Н. Вывод строки на экран
Входные данные
АН
09Н
DS:DX Указатель к началу символьной строки
Символьная строка должна заканчиваться символом $ (24Н). Отдельные символы
выводятся как при функции 02Н.
Ввод числовых данных
Из предыдущего параграфа видно, что все базовые функции системы MS-DOS предназначены только для ввода строк, а во многих случаях требуется вводить числа, которые
будут участвовать в различных математических вычислениях. Для решения этой проблемы необходимо написать ряд конвертирующих функций, которые позволят переводить
строки из цифр в двоичное представление числа в различных форматах и наоборот.
Необходимо вспомнить, как можно представить любое десятичное число:
M = Mn*10n-1 + Mn-1*10n-2 + … + M2*10 + M1.
Таким образом, число 325 можно представить как 325=3*100+2*10+5.
Ввод чисел всегда осуществляется, начиная со старших разрядов. Т.е. после завершения процедуры ввода строка всегда будет содержать ASCII представление цифр числа,
начиная со старших разрядов. Для перевода строки в двоичное число необходимо произвести переход от ASCII представления каждой цифры к ее числовому представлению и
произвести операцию суммирования всех цифр в соответствии с их весами.
Перевод цифры из ASCII представления в числовое осуществляется путем вычитания значения 30h из значения кода, так как цифры в таблице кодов ASCII занимают положение от 30h(символ ‘0’) до 39h(символ ‘9’).
При переводе из строкового представления в числовое необходимо учитывать разрядность результата. Пользователь может ввести очень большое число, которое не может
быть помещено в разрядную сетку машины, соответственно при попытке перевода этого
числа возникнет ошибка.
Перевод знаковых чисел осуществляется аналогично, но необходимо помнить, что
знаковые числа в машине представляются в дополнительном коде, соответственно при
первоначальном переводе можно получить прямой код числа, а затем произвести его перевод в дополнительный.
Перевод из двоичного представления числа в строковое осуществляется обратным
преобразованием. Знаковые числа переводятся в прямой код без знака. Затем путем деле57
ния числа на основание системы счисления (в нашем случае 10) и взятия остатка производится получение младшей цифры числа. Затем частное снова делится на основание системы счисления и запоминается остаток, и т.д. пока частное не станет равным нулю. Таким
образом, будет получено представление числа в виде цифр, остается только осуществить
их перевод в ASCII формат и сформировать строку.
Процедуры
Для решения проблемы дублирующихся участков кода и реализации структурного
подхода к программированию используется механизм процедур. Процедура представляет
собой группу команд для решения какой-либо подзадачи и обладает средствами получения управления из точки вызова задачи более высокого уровня и возврата в эту точку. Таким образом это однократно написанная совокупность команд, вызываемая из любой точки программы.
Для описания последовательности команд в виде процедуры используются директивы PROC и ENDP. В самом простом случае процедура может быть описана в виде:
<Имя процедуры> PROC
<Тело процедуры>
[Имя процедуры] ENDP
Передача параметров в процедуры и получение результатов может осуществляться
несколькими способами:
Передача параметров через регистры.
Передача параметров через стек.
Передача параметров через глобальные переменные.
Возвращение результатов через регистр флагов.
Наиболее быстрый и эффективный способ передачи параметров – это передача через
регистры. Но проблема состоит в том, что регистров очень ограниченное количество, поэтому не всегда имеется возможность воспользоваться этим способом.
Передача параметров через стек неудобна с той точки зрения, что необходимо всегда
помнить точную последовательность помещения параметров, и доступ к ним более сложен, чем для регистровых параметров. К тому же всегда необходимо выделять достаточный объем стека, чтобы исключить возможность его переполнения.
Передача параметров через глобальные переменные используется в тех случаях, когда процедура ориентирована на работу в рамках четко определенной задачи, где состав
глобальных переменных не изменяется. Такой подход позволяет сократить расходы на передачу параметров между процедурами.
Возвращение результата через регистр флагов применяется для информации об состоянии завершения процедуры в том случае, если необходимо вернуть булевское значение (истина/ложь) при этом экономятся регистры.
При построении процедур перед началом основных действий рекомендуется сохранять значения всех используемых регистров в стеке, чтобы обеспечить возможность использование процедуры в различных участках кода без контроля изменяемости параметров, в противном случае возможно возникновение трудно обнаруживаемых ошибок.
Более подробное описание механизма процедур в языке ассемблера будет рассмотрено в последующих самостоятельных работах.
Задание на самостоятельную работу и требования к отчету
В ходе выполнения самостоятельной работы необходимо
разработать програм58
му, осуществляющую ввод и обработку цифровых данных по заданной формуле. Ввод исходных данных осуществляется с клавиатуры, вывод результатов обработки производится
на экран компьютера. В программе должен осуществляться контроль за корректностью
ввода данных, т.е. принадлежностью к заданным диапазонам вводимых значений, и правильностью выполнения преобразования - контроль за переполнением разрядной сетки в
арифметических операциях. При возникновении ошибок должны выводиться соответствующие сообщения. Текст и формат сообщений придумать самостоятельно.
При выполнении самостоятельной работы в программе разрешается использовать
функции BIOS и DOS.
Программа должна быть написана для реального режима работы микропроцессора с
использованием инструкций процессоров 8086 - 80286. Текст программы должен содержать комментарии и должен быть построен по принципу структурного программирования. Т.е. должны присутствовать процедуры ввода данных, перевода данных из числового
формата в строковый и наоборот, а также процедуры математической обработки, которые
могут быть использованы в других лабораторных работах. Обратите внимание, в последующих лабораторных работах использование функций DOS может быть запрещено.
Отчет по самостоятельной работе должен содержать описание индивидуального задания, граф схемы алгоритмов с их описанием, текст программы с соответствующими
комментариями и пример результатов работы.
Варианты представлены в табл. 1. Номер варианта берется в соответствии с порядковым номером в журнале по проведению самостоятельных работ.
Таблица 1
Вариант
Размер данных
1
Байт
2
Байт
3
Байт
4
Байт
5
Байт
6
Байт
7
Байт
8
Байт
9
Байт
10
Байт
11
Байт
12
Байт
13
Слово
14
Слово
15
слово
16
слово
17
слово
18
слово
19
слово
20
слово
21
слово
22
слово
23
слово
24
слово
Знаковые данные
нет
нет
нет
нет
да
да
да
да
нет
нет
нет
нет
да
да
да
да
нет
нет
нет
нет
да
да
да
да
59
Вариант преобразования
(A*B-C)/D
A/C-C*B
(A+B)*C/D
C*2/(A-B)
D*A/(A+B)
(A v B)*D/(C-1)
(A-1)*2/(C*2+B)
D*4/((A-C)*(B-1)
B*(A+B)/(C-D-1)
(C&D)xor(A&B)*D/(A+B)
((C*4) xor B)/(A*D)
(C-10*2/(D+B-A)
(A*B-C)/D
A/C-C*B
(A+B)*C/D
C*2/(A-B)
D*A/(A+B)
(A v B)*D/(C-1)
(A-1)*2/(C*2+B)
D*4/((A-C)*(B-1)
B*(A+B)/(C-D-1)
(C&D)xor(A&B)*D/(A+B)
((C*4) xor B)/(A*D)
(C-10*2/(D+B-A)
Самостоятельная работа №6 Компоновка программ, написанных на языке
Turbo Pascal и ассемблер
Цель работы
Научиться объедитять модули, написанные на ассемблере и языке высокого уровня в
единую исполняемыую программу.
Информационные материалы к занятию
Ассемблер предоставляет программисту полную свободу действий при программировании ресурсов ЭВМ, но время, затрачиваемое на создание ассемблерных программ,
слишком велико. Работая на языках высокого уровня (ЯВУ), часто можно столкнуться с
ограничениями, которые неизбежны при использовании этих языков: большой объем занимаемой памяти, недостаточное быстродействие, недоступны внутренние ресурсы компьютера. Тогда рационально переписывать не всю программу на ЯВУ, а только несколько
фрагментов кода, критичных, например, по времени выполнения. И наоборот, существует
много библиотек, написанных на ЯВУ, которые с успехом могут применяться в ассемблерных программах.
В данной самостоятельной работе в качестве ЯВУ используется Turbo Pascal 7.0
(ТР).
Возможны два варианта объединения текстов программ, написанных на ТР и Ассемблере.
1.
Подпрограмма записывается на языке ассемблера. Компилируется
компилятором Tasm. Полученный объектный файл компонуется с основной программой, написанной на TP.
2.
Используя встроенный ассемблер пакета TP, отдельные части текста
программы можно написать непосредственно на языке ассемблера, заключив их в
операторные скобки Asm ... End.
Написание процедуры на ассемблере
Первый вариант рекомендуется использовать, когда функция или подпрограмма достаточно большая, и имеет смысл ее компилировать отдельно или в ней нужно использовать инструкции, недопустимые для встроенного в Pascal ассемблера. Для реализации этого варианта необходимо выполнить следующие требования:
1) В ТР-программе использовать директиву компилятора {$L <имя .obj-файла>},
где .obj-файл – это программа, написанная на ассемблере и содержащая процедуру, вызываемую из ТР. Эта asm-программа должна быть откомпилирована компилятором tasm.exe
до уровня объектных кодов.
2) В ТР-программе ассемблерная процедура, описывается как external. Теперь доступ ней осуществляется так же, как к обычной подпрограмме в ТР.
3) В asm-программе используется директива PUBLIC, чтобы указать, что процедура, реализуемая в этой программе, может использоваться во внешних по отношению к
ней программах.
4) Параметры в ассемблерную подпрограмму передаются через стек. Правила передачи параметров из Pascal в ассемблер:
- параметры-значения размером в 1 байт передаются одним словом, несет информацию младший байт.
60
- параметры-значения размером в 2 байта передаются одним словом;
- параметры-значения размером в 4 байта передаются двумя словами;
- все остальные параметры-значения передаются полными адресами;
- параметры-переменные и параметры-константы передаются полными адресами.
Вызов подпрограммы реализуется по варианту:
push <параметр 1>
; занесения параметров в стек
………
push <параметр n>
call <far или near> <имя подпрограммы> ; вызов подпрограммы
Вызываемые же подпрограммы имеют стандартно оформленные вход и выход:
Вход:
<имя> proc <способ вызова: near или far>
push BP
; сохранить старое BP в стеке
mov BP,SP
; установить базу для чтения параметров
sub SP,<объем памяти для локальных переменных>
<сохранение регистров SP, SS, DS>
………
Выход:
mov SP,BP
; освободить память
pop BP
; восстановить значение BP
ret <размер области параметров>
Таким образом, в момент получения управления подпрограммой в стеке находятся
параметры (в виде значений или адресов) и адрес возврата в вызывающую программу (2-х
или 4-х байтовый в зависимости от варианта вызова (см. рис. 11).
Адрес области параметров в этом случае определяется относительно содержимого
регистра bp: [bp+4] - содержит адрес последнего параметра при ближнем вызове; [bp+6] –
содержит адрес последнего параметра при дальнем вызове. Адреса остальных параметров
определяются аналогично с учетом длины каждого параметра в стеке (см. далее).
Содержимое стека: а) в момент передачи управления п/программе; б) во время
работы п/программы.
5) При выходе из подпрограммы команда ret должна удалить из стека всю область параметров, в противном случае произойдет нарушение работы вызывающей программы. Результаты работы ассемблерной программы записывают в регистры AX (или
AX,DX), если в ТР она объявлена как функция. Правила передачи параметров из функции,
на ассемблере в ТР:
- однобайтовый результат передается в регистре AL;
- слово-результат передается в регистре AX;
61
- 4-байтовый результат передается в регистрах DX (старшая часть или адрес
сегмента) и AX (младшая часть или смещение).
ТР использует следующие внутренние представления данных.
Целое
shortint: -128..127
байт со знаком;
byte:
0..255 байт без знака;
integer: -32768..32767 слово со знаком;
word:
0..65535
слово без знака;
Символ
char: код ASCII - байт без знака.
Булевский тип boolean: 0(false) и 1(true) - байт без знака.
Указатель
pointer: сегментный адрес и смещение - двойное слово (сегментный адрес - в старшем слове.
Строка
string: символьный вектор, указанной при определении длины,
содержащий текущую длину в первом байте.
Массив
array: последовательность элементов указанного типа, расположенных в памяти таким образом, что правый индекс возрастает
быстрее левого (для матрицы - построчно).
Если подпрограмма на ассемблере должна вычислять множество значений, например, массив, то их нужно объявлять в модуле на ТР, передавать в ассемблерный модуль
указатель на начало этого множества. Тогда после вычислений на ассемблере в массиве
основной программы на языке ТР будут требуемые значения.
Основную программу следует писать на ТР, что обеспечит подключение среды ТР.
Модуль на ассемблере может включать одну или несколько подпрограмм (процедур или
функций). Перед подключением он должен быть оттранслирован.
Для подключения модулей в объектном виде в ТР используется директива компилятора {$L <имя файла>}. Подключаемые процедуры и функции при этом должны быть
описаны в ТР в соответствии с его правилами, причем вместо тела подпрограммы после
заголовка указывается служебное слово external (внешний), например:
Procedure ffff(y:integer; var z:char); external;
В ассемблере сегмент кода должен носить имя code, а сегмент данных - data. Оба
сегмента должны быть описаны public. При этом в процессе компоновки сегменты будут
объединены, и появится возможность доступа к глобальным данным Паскаля через объявление их внешними (extrn) в сегменте данных ассемблерной части. Причем, даже если
таким образом осуществляется доступ к массиву, в extrn достаточно указать ссылку на
первый элемент, например:
extrn М:word ; М-массив ТР, объявленный: var М:array[1:10] of integer.
Доступ к последующим элементам будет осуществляться по правилам ассемблера.
В свою очередь, данные ассемблерной части программы, даже будучи размещенными в общем сегменте данных с Паскалем, останутся для паскалевской части программы
«невидимыми». Кроме того, ассемблерные данные, размещенные в сегменте данных data,
нельзя инициализировать.
Правила модульного программирования ассемблера также требуют, чтобы все имена
программы, использующиеся отдельно транслируемыми модулями, были описаны как
внутренние (public), а все имена, используемые ассемблером из других модулей, - как
внешние(extrn).
Примеры программ.
Пример 1. Программа сложения двух целых чисел.
Вариант 1. Реализация в виде процедуры и функции, подключаемых в секции реализации (вариант near). Параметры передаются через стек, а результат возвращается процедурой - через параметр, переданный по ссылке, функцией - через регистр AX.
Модуль на Турбо Паскале:
Program var_near;
{$l add_near.obj}
62
Var a,b,c:integer;
Function fun_near(x,y:integer):integer;external;
Procedure proc_near(x,y:integer;var z:integer);external;
Begin
writeln('Введите числа:');
readln(a,b);
proc_near(a,b,c);
writeln('Результаты: функции - ',fun_near(a,b),' процедуры - ',c);
end.
Структура стека во время выполнения подпрограммы на ассемблере: а - функции; б
- процедуры
Модуль на ассемблере:
code segment byte public
assume CS:code
public fun_near,proc_near
; функция
fun_near proc near
push BP
mov BP,SP
mov AX,word ptr[BP+6]
;
add AX,word ptr[BP+4]
; результат в AX
mov SP,BP
pop BP
ret 4
fun_near endp
; процедура
proc_near proc near
push BP
mov BP,SP
mov AX,word ptr[BP+10]
add AX,word ptr[BP+8]
les DI,dword ptr[BP+4]
; загрузка адреса результата
mov ES:[DI],AX
; запись результата
mov SP,BP
pop BP
ret 8
proc_near endp
code ends
end
Вариант 2. Передача параметров через «общий» сегмент данных data.
Модуль на Турбо Паскале:
Program pa1;
{$l add_near.obj}
63
Var a,b,c:integer;
Function fun_near:integer;external;
Procedure proc_near(var z:integer);external;
Begin
writeln('Введите числа:');
readln(a,b);
proc_near(c);
writeln('Результаты: функции - ',fun_near, ' процедуры - ',c);
end.
Структура стека во время выполнения подпрограммы на ассемблере: а - функции, б
- процедуры.
Модуль на ассемблере:
data segment word public
extrn a:word,b:word
data ends
code segment byte public
assume CS:code,DS:data
public fun_near,proc_near
; функция
fun_near proc near
mov AX,a
add AX,b
; результат в AX
ret
fun_near endp
; процедура
proc_near proc near
push BP
mov BP,SP
mov AX,a
add AX,b
les DI,dword ptr[BP+4]
; загрузка адреса результата
mov ES:[DI],AX
; запись результата
mov SP,BP
pop BP
ret 4
proc_near endp
code ends
end
Содержимое стека в момент работы вызываемых подпрограмм для всех трех случаев
см. на рис. 13
Пример 2. Программа удаления «лишних» пробелов в символьной строке. Пример
иллюстрирует особый случай возврата значения функции типа string через указатель на
специальную область, передаваемый функции в стеке, и обращение из подпрограммы на
64
ассемблере к процедуре, написанной на Паскале (см. рис. 14).
Модуль на Турбо Паскале:
Program probel;
{$l stroka.obj}
{Эта программа удаляет "лишние" пробелы.}
Var s:string;
Function sss(st:string):string;external;
Procedure print(n:byte);
Begin
writeln('Длина полученной строки',n:3);
end;
Begin
readln(s);
writeln(sss(s));
end.
Передача параметров и управления в программе Примера 1.
Модуль на ассемблере:
code segment byte public
assume cs:code
public sss
extrn print:near
sss proc near
push BP
push DS
lds SI,dword ptr[BP+4]
les DI,dword ptr[BP+8]
cld
lodsb
inc DI
mov CL,AL
xor CH,CH
jcxz pusto
BX,1
mov DL,0
cycl1:lodsb
cmp AL,' '
je prod1
mov BX,0
inc DL
stosb
loop cycl1
prod1: cmp BX,1
je prod2
; объявление имени sss доступным извне
; объявление print в других модулях
; состояние стека после записи BP
; сохранить DS
; загрузить адрес параметра s
; загрузить адрес результата
; флаг направления строковой обработки
; загрузить длину строки в AL
; место под длину результирующей строки
; занести длину строки
; в регистр CX
; если 0, то перейти на завершение
mov
; установить признак «гашение» пробелов
; обнулить счетчик длины строки
; загрузить символ в AL
; сравнить с пробелом
; если пробел – на обработку пробелов
; иначе сбросить признак «гашения»
; увеличить длину на 1
; записать символ в строку результата
; вернуться в цикл
; если признак «гашения» установлен
; то вернуться в цикл
65
mov BX,1
inc DL
stosb
prod2: loop cycl1
cmp DL,0
je prod3
cmp BX,1
jne prod3
dec DL
prod3: mov AL,DL
pusto:les DI,dword ptr[BP+8]
stosb
pop DS
xor AH,AH
push AX
call print
mov SP,BP
pop BP
ret 4
sss endp
code ends
end
; иначе установить признак «гашения»
; увеличить длину на 1
; записать разделительный пробел
; вернуться в цикл
; если все символы - пробелы
; то перейти к завершению обработки
; если последний символ не пробел
; то перейти к завершению обработки
; иначе - уменьшить длину на единицу
; запись в AL длины строки
; повторная загрузка адреса результата
; занесение длины строки
; восстановить DS
; записать в стек параметр
; вызвать процедуру на Паскале
; удалить область параметров из стека
Структура стека: а - в начале выполнения ассемблеровского модуля, б - в начале
выполнения процедуры на Паскале.
На рисунке 15 показано состояние стека после сохранения в нем содержимого регистра BP в начале подпрограммы на ассемблере. Область параметров, передаваемых подпрограмме на ассемблере, включает только объявленный в описании функции sss в программе на Паскале адрес исходной строки s. Адрес области, переданной Паскалем под результат функции типа string, пишется в стек до параметров и удалению функцией не подлежит. В свою очередь, передавая управление процедуре на Паскале, ассемблеровская
программа помещает в стек параметр n (несмотря на то, что длина параметра 1 байт, в
стек все равно помещается два байта, но второй байт не определен). При выполнении команды call туда же будет помещен адрес возврата, после чего уже процедура на Паскале
поместит в стек значение регистра BP.
Написание процедуры на встроенном в ТР ассемблере
Начиная с версии 6.0, TР содержит встроенный ассемблер. Он позволяет включать в
программу фрагмент текста на языке Ассемблер в операторных скобках asm...end;. При
этом в ассемблерной части программы можно использовать идентификаторы из программы на ТР.
66
В ассемблерной части нельзя использовать:
- стандартные процедуры и функции;
- метки, объявленные не в данном блоке и др.
Метки, используемые в ассемблерной части программы должны быть локальными,
т.е. начинаться с символа "@".
Пример
Program p_ass3;
const n=10;
var M:array[1..n] of integer;
s,i,b: integer;
function Sm (var Mas;n:integer):integer;assembler;
asm
lds si,mas {адрес массива}
mov bx,0
mov cx,n
cld
@1: lodsw
add bx,ax
loop @1
mov ax,bx
add ax,b {прибавляется число, объявленное в Pascal - b}
end;
begin
writeln('Введите начальное приращение');
readln(b);
writeln('Введите 10 чисел');
for i:=1 to n do
readln(m[i]);
writeln ('Сумма элементов массива :',sm(m,n));
readln;
end.
Задания к самостоятельной работе
1. В соответствии с заданием к самостоятельной работе N 5 вычисления y1 и y2 запрограммируйте на языке ассемблера, вычисление y - на языке Turbo Pascal.
Для вычисления y1 создайте отдельный файл на языке Ассемблера, для вычисления
y2 используйте встроенный Ассемблер (конструкция asm...end).
Самостоятельная работа №7 Организация ввода/вывода данных из командной
строки
Цель работы: освоение принципов передачи параметров посредством командной
строки и построение файлов типа EXE.
Префикс сегмента программы (PSP)
Когда программа загружается для выполнения, ей выделяется вся область от самого
младшего свободного адреса до конца наличной рабочей памяти. (Затем программа может
освободить часть этой области.) Эта область называется сегментом программы. Она всегда начинается с границы параграфа (т.е. ее начальный адрес кратен 16). Первые 256 байтов с начала сегмента программы называются его префиксом (PSP). ДОС-16 помещает в
PSP весьма разнородную информацию. Часть этой информации - системная, а другая
предназначена для программы. Программа загружается со смещением 256 байтов от нача67
ла сегмента программы, непосредственно после PSP. Прежде чем передать ей управление,
ДОС-16 записывает в некоторые из сегментных регистров адрес PSP, так что программа
имеет непосредственный доступ к информации в нем. Для программ в формате СОМ адрес PSP содержится во всех сегментных регистрах. Для программ в формате ЕХЕ адрес
PSP записывается в DS и ES. Программа может сохранить этот адрес, чтобы использовать
позднее, но в этом нет необходимости - его можно получить всегда при помощи системной функции 62Н.
Содержимое PSP отражает этапы развития операционной системы. При реализации
некоторых новых моментов к PSP добавляются новые поля. В результате там имеются
элементы, которые служат различным целям и ориентированы к различным методам.
Среди них есть и устаревшие, которые уже не используются. Содержимое PSP показано в
табл. 1.
Поле 1 содержит код инструкции INT 20H (CD 20). Прерывание 20Н - один из способов завершить выполнение программы (см. прерывание 20Н). Следовательно, программа может завершиться инструкцией для перехода к началу PSP (CS должен содержать
сегментный адрес PSP). Эта возможность выглядит совершенно бессмысленной при наличии системной функции для завершения 4СН, не говоря о том, что программа сама может
выполнить инструкцию INT 20H. На самом деле INT 20H в начале PSP имеет другое
предназначение - повышает надежность при выполнении программ с нерешенными внешними связями. Если программа выполнит, переход к адресу, который не определен при
связывающем редактировании, это приведет к ее завершению. так как редактор связей дает значение 0 всем таким адресам, т.е. осуществлен переход к началу PSP.
Таблица 2.12 Содержание PSP
Поле
Смещение
Длина Содержание
(10
(16)
1
0
0
2
Инструкция INT 20H (завершение программы)
2
2
2
2
3
4
4
5
4
5
1
5
5
10
А
4
Размер памяти в блоках по 16 байтов (параграфах)
Резервировано
Дальний переход (CALL сегмент: смещение).
Второй байт (смещение) содержит количество
свободных байтов в сегменте.
Адрес завершения (вектор 22H)
6
14
Е
4
Адрес обработки Ctrl-Break (вектор 23H)
7
8
9
18
22
44
12
16
2С
4
22
2
10
11
12
13
14
15
16
17
46
80
83
85
92
101
108
128
2Е
50
53
55
5С
65
6С
80
34
3
2
7
9
7
9
1
Адрес обработки ошибок (вектор 24H)
Используется операционной системой ДОС
Адрес окружения (только сегмент, смещение 0)
Рабочая область ДОС
Инструкции INT 21H и RET FAR
Резервировано
Префикс первого FCB
Первый FCB
Префикс второго FCB
Второй FCB
Длина параметров командной стpoки
68
129
81
127
Параметры командной стpoки
128
80
128
DTA (no умолчанию)
Поле 2 содержит размер наличной оперативной памяти в блоках по 16 байтов (параграфах). Точнее, поле содержит сегментный адрес последнего параграфа памяти. Это значение использует программа CHKDSK в своем отчете. Нужно иметь в виду, что в некоторых случаях это значение может не совпадать с действительным количеством памяти.
Например, некоторые виртуальные (RAM) диски используют старшие адреса памяти и
изменяют информацию о последнем адресе, которой располагает ДОС. Поэтому может
существовать разница между полем 2 PSP и значением, полученным прерыванием 12Н
BIOS, которое извлекает информацию о наличной памяти (см. п. 3.8.2).
Поле 4 дает возможность выполнять некоторые уже существующие программы, которые используют другой метод обращения к системным функциям. При этом методе номер функции записывается в CL вместо АН, остальные параметры задаются в соответствии с описанием функции, и выполняется CALL (в текущем сегменте программы) к
началу поля 4. Поскольку поле содержит инструкцию FAR CALL к ДОС (к диспетчеру
системных функций), требуемая функция выполняется, после чего управление возвращается Программе. При использовании этого механизма содержание АХ всегда теряется.
Поскольку новые программы используют непосредственно инструкцию INT 21H, а старые
программы, применяющие этот метод, почти не встречаются, практически поле 4 не представляет интерес как средство для выполнения системных функций. С другой стороны,
второе слово поля содержит полезную информацию, которую можно использовать для
совершенно других целей. При формировании адресной части инструкции FAR CALL,
ДОС выбирает такую комбинацию сегментного адреса и смещения, чтобы смещение
несло в себе определенную информацию о сегменте программы, в котором загружена
программа (это возможно, так как один и тот же адрес можно задать различными комбинациями сегментного адреса и смещения, например A00:0100 и А010:0000). Если сегмент
программы больше 64 Кбайтов, смещение (второе слово в поле) равно FEEEH (64 Кбайта
минус размер PSP и минус 16 байтов) Однако если сегмент программы меньше 64 Кбайтов, смещение равно его точному размеру (снова минус PSP и минус 16 байтов). Следовательно, поле можно использовать как индикатор, располагает ли программа сегментом
длиной не менее 64 Кбайтов. Если он меньше, поле содержит его размер.
Поля 5, 6 и 7 содержат векторы трех адресных прерываний ДОС, какими они были
до запуска программы. Это INT 22H (адрес завершения), INT 23H (прерывание программы
при помощи Ctrl-Break) и INT 24H (обработка критических ошибок). Программа может
изменять свободно эти векторы - при ее завершении ДОС-16 восстанавливает их предыдущее содержание из PSP. Например, программа может ввести собственную обработку
Ctrl-Break, но после ее завершения будет восстановлена стандартная обработка (командным процессором COMMAND). Если, однако, программа изменит некоторое из этих полей в PSP, изменение останется и после ее завершения. Например, можно создать резидентную программу, заменяющую стандартную обработку критических ошибок в COMMAND. При нормальных обстоятельствах, однако, в этом особого смысла нет. Трудно даже представить ситуацию, в которой программе будет необходимо знать значения этих
полей.
Поле 9 содержит адрес окружения программы. Указан только адрес сегмента - смещение равно нулю.
Поле 11 содержит инструкции INT 21Н и RET FAR, что дает возможность выполнять косвенно обслуживающие функции ДОС-16. Для использования этой возможности
программа должна подготовить все необходимое для выполнения нужной системной
функции (номер функции в АН и т.д.) и затем осуществить дальний переход к PSP+50H.
Поля 13, 14, 15 и 16 помогают программам, которые используют для работы с файлами метод FCB. Основная идея - облегчить обработку параметров из командной строки
программы. Предполагается, что эти параметры представляют собой имена файлов, кото69
18
19
рые обрабатываются программой - это действительно наиболее часто встречающийся случай. Речь идет о первых двух параметрах. ДОС использует их как имена файлов и конструирует с их помощью два неоткрытых FCB в PSP. Если они нужны программе, она
может их открыть и использовать, без необходимости декодировать параметры в командной строке и конструировать собственные FCB.
При использовании этой возможности необходимо иметь в виду некоторые возможные осложнения. Прежде всего, два FCB перекрываются как друг с другом, так и с DTA в
PSP. Если используется только первый из них и изменится адрес DTA, все в порядке. В
противном случае один или оба FCB нужно переместить из PSP, до их открытия. Кроме
того, напомним, что метод FCB не допускает имя пути в файловой спецификации, а только имя диска и им* файла. Если некоторый из параметров содержит и путь, соответствующий FC0 будет заполнен неправильно. Для описания FCB см. п. 2.2.5.
ПРИМЕЧАНИЕ. Когда программа получает управление, значение А* показывает
содержат ли первые два параметра командной строки действ»* тельные имена дисков. Если AL-FFH, первый параметр содержит правильное имя диска (в противном случае ALOOH). Аналогичным образом AH дает информацию о втором параметре.
Поля 17 и 18 обеспечивают доступ программы ко всем параметрам командной строки. Поле 17 содержит общую длину цепочки параметров ( от 0 до 127), а поле 18 содержит эту цепочку с символом CR – 0Dh в конце. Здесь не содержится ни имя программы ,
ни параметры для переназначения стандартного входа или выхода7 Имя программы в
формате устройство:путь:имя программного файла содержится в окружении программы
после его последней переменной. Параметры переназначения недоступны для пользовательской программы.
Эти два поля перекрываются полем 19 – DTA, поэтому их нужно обработать до возможного разрушения в результате дисковых операций.
Поле 19 используется как DTA(область обмена с диском) по умолчанию.
Адрес PSP можно получить функцией 62h прерывания 21h, которая возвращает адрес СЕГМЕНТ:СМЕЩЕНИЕ (ES:BX).
Задание на самостоятельную работу и требования к отчету
В ходе выполнения самостоятельной работы необходимо
разработать программу, осуществляющую ввод и обработку цифровых данных по заданной формуле. Ввод исходных данных осуществляется из командной строки в формате: /<имя параметра>=<значение>. Необходимо учитывать, что пользователь может задать параметры в любом порядке, например: “ /a=5 /b=10 /d=15 “ или “ /d=15 /b=10 /a=5 “, т.е. программа должна уметь анализировать имена параметров и корректно заполнять их содержимое. В программе должен осуществляться контроль за корректностью ввода данных, т.е. контроль на
достаточность параметров, принадлежностью к заданным диапазонам вводимых значений,
и правильностью выполнения преобразования - контроль за переполнением разрядной
сетки в арифметических операциях. При возникновении ошибок должны выводиться соответствующие сообщения. Текст и формат сообщений придумать самостоятельно.
При выполнении лабораторной работы в программе разрешается использовать
функции BIOS и DOS.
Прдолжна быть написана для реального режима работы микропроцессора с использованием инструкций процессоров 8086 – 80286. Тип загружаемого файла – EXE. Текст
программы должен содержать комментарии и должен быть построен по принципу структурного программирования. Т.е. должны присутствовать процедуры ввода данных, перевода данных из числового формата в строковый и наоборот, а также процедуры математической обработки, которые могут быть использованы в других лабораторных работах. Обратите внимание, в последующих лабораторных работах использование функций DOS
может быть запрещено.
Отчет по лабораторной работе должен содержать описание индивидуального зада70
ния, граф схемы алгоритмов с их описанием, текст программы с соответствующими комментариями и пример результатов работы.
Варианты представлены в табл. 1. Номер варианта берется в соответствии с порядковым номером в журнале по проведению лабораторных работ.
Таблица 1
ВариРазмер данных
Знаковые данВариант преобразования
ант
ные
1
Байт
нет
(A*B-C)/D
2
Байт
нет
A/C-C*B
3
Байт
нет
(A+B)*C/D
4
Байт
нет
C*2/(A-B)
5
Байт
да
D*A/(A+B)
6
Байт
да
(A v B)*D/(C-1)
7
Байт
да
(A-1)*2/(C*2+B)
8
Байт
да
D*4/((A-C)*(B-1)
9
Байт
нет
B*(A+B)/(C-D-1)
10
Байт
нет
(C&D)xor(A&B)*D/(A+B)
11
Байт
нет
((C*4) xor B)/(A*D)
12
Байт
нет
(C-10*2/(D+B-A)
13
Слово
да
(A*B-C)/D
14
Слово
да
A/C-C*B
15
слово
да
(A+B)*C/D
16
слово
да
C*2/(A-B)
17
слово
нет
D*A/(A+B)
18
слово
нет
(A v B)*D/(C-1)
19
слово
нет
(A-1)*2/(C*2+B)
20
слово
нет
D*4/((A-C)*(B-1)
21
слово
да
B*(A+B)/(C-D-1)
22
слово
да
(C&D)xor(A&B)*D/(A+B)
23
слово
да
((C*4) xor B)/(A*D)
24
слово
да
(C-10*2/(D+B-A)
6.4Темы рефератов / учебных проектов
1. Особенности построения серверных операционных систем.
2. Операционные системы для мейнфреймов фирмы IBM.
3. Структура и особенности построения IBM ОС Z/OS.
4. Структура и особенности построения IBM ОС i5/OS.
5. Структура и особенности построения IBM ОС AIX.
6. Архитектура платформы IBM Virtualization Engine.
7. Структура и особенности построения IBM OS/400.
8. Основные производители операционных систем.
9. Операционная система QNX.
10. Микроядро операционной системы Mach.
71
11. Микроядерные операционные системы.
12. Основные производители серверных операционных систем.
13. Основные производители клиентских операционных систем.
14. Кластерные операционные системы.
15. Обзор коммерческих Unix-операционных систем различных производителей.
16. Обзор коммерческих Linux-операционных систем различных производителей.
17. Обзор свободно распространяемых Unix-операционных систем различных производителей.
18. Обзор свободно распространяемых Linux-операционных систем.
19. Сравнение свойств Linux-операционных систем различных производителей.
20. Оптимизация операционной системы Windows XP.
21. Реестр операционной системы Windows XP.
22. Инсталляция операционной системы Windows XP.
23. Установка нескольких операционных систем на ПК.
24. Тенденции развития сетевых операционных систем.
25. Операционные системы реального времени.
26. Обзор стандартов, регламентирующих разработку операционных систем.
27. Операционные системы многопроцессорных компьютеров.
28. Виртуальные машины и их операционные системы.
29. Множественные прикладные среды.
30. Виртуальные приложения.
31. Средства виртуализации основных компаний-разработчиков ПО.
32. Объектно-ориентированные технологии в разработке операционных систем.
33. Операционные системы Интернет-серверов.
34. Программные инструментальные средства анализа и оптимизации операционных
систем.
35. Настройка и оптимизация производительности операционных систем.
36. Особенности построения сетевых операционных систем.
37. Подготовка жесткого диска к установке операционной системы.
38. Сравнительная оценка стоимости владения Windows и Linux операционных систем.
39. Анализ надежности и безопасности Windows и Linux операционных систем.
40. Прогноз развития операционных систем.
72
7.Перечень основной и дополнительной учебной литературы, необходимой для
освоения дисциплины (модуля)
Основная Литература:
1. Назаров С.В. Операционные системы. Практикум: Учебное пособие. -М.: КНОРУС, 2012 - 376 с.
2. Операционные системы, среды и оболочки: Учебное пособие / Т.Л. Партыка, И.И.
Попов. - 5-e изд., перераб. и доп. - М.: Форум: НИЦ ИНФРА-М, 2013. - 560 с.-эбс
3. Современные операционные системы: учебное пособие / С.В. На-заров, А.И. Широков. — М.: Интернет-Университет Информационных Технологий: БИНОМ. Лаборатория знаний, 2011. — 279 с.
Дополнительная Литература:
1. Гордеев, А.В. Операционные системы: учебник для вузов. - СПб.: Питер, 2005.416 с.
2. Дейтел Х.М. Дейтел П. Дж. Чофнес Д.Р. Операционные системы Т.1 Основы и
принципы - Москва БИНОМ 2006г
3. Олифер В.Г. Сетевые операционные системы: уч. пос. для вузов. - СПб.: Питер,
2005. - 539 с.
4. Гордеев, А.В., Молчанов, А.Ю. Системное программное обеспечение: уч. пос.
для вузов - СПб: Питер, 2001 - 736 с.
Периодические издания:
Журналы:
1. « Сети и телекоммуникации»
2. «Стандарты качества»
3. «Известия РАН. Теория и системы управления»
4. «Электроника»
5. «Ремонт & сервис»
6. «PC MAGAZINE RE»
7. «Математика»
8. «САПР и Графика»
8. Перечень ресурсов информационно-телекоммуникационной сети "Интернет"
(далее - сеть "Интернет"), необходимых для освоения дисциплины (модуля)
Программное обеспечение и Интернет-ресурсы
1. Википедиа - ru.wikipedia.org
2. Лекции по операционным системам - StudFiles.ru
3. Наборы утилит служебных программ операционных систем- referat.ru
9. Методические указания для обучающихся по освоению дисциплины (модуля)
9.1 Методические рекомендации ( материалы) преподавателю
В процессе проведения аудиторных занятий по дисциплине большое внимание уделяется воспитательному аспекту, способствующему формированию сознательной, профессионально подготовленной личности. Современный выпускник высшей школы должен,
помимо профессиональных знаний, иметь также навыки гуманного социального поведе73
ния и нравственную основу, которая закладывается в процессе коммуникации в студенческом коллективе и с преподавателями.
Немаловажное значение имеет моральная подготовка будущего специалиста (особенно специалиста в области информационных технологий) к рыночным реалиям нашего
времени. В связи с этим на занятиях должны быть показаны необходимость правильного
социального поведения на производстве, обладание коммуникативными способностями,
возможность освоения функций смежных профессий. На протяжении изучения всего курса дисциплины следует планомерно воспитывать уважение к своему делу, подчёркивать
важность и необходимость труда программиста, приводить примеры ответственности работающих комплексов. Такая направленность воспитательной деятельности в рамках
профессиональной дисциплины будет способствовать повышению заинтересованности
студентов, активизации их учебной деятельности, повышению качества обучения и, в целом, формированию нравственной личности с хорошими профессиональными знаниями.
Воспитательная сторона всей педагогической деятельности по курсу предполагает
использование активных методов обучения, подготовку докладов, обсуждение проблемно-ситуационных задач. Это способствует формированию научного мировоззрения студентов и наряду с учебными целями, представляет большие возможности по формированию у студентов не только знаний по дисциплине, но и воспитанию чувства уважения к
выбранной профессии, профессиональным ценностям, коллегам. Все это достигается при
общении с преподавателем в ходе проведения аудиторных занятий.
Лекции
Лекционные занятия должны обеспечить студента необходимым теоретическим материалом, практическими примерами, обзором дополнительных источников информации,
необходимых для получения полного представления об изучаемой теме. Материал лекций
со ссылками на дополнительную литературу и предлагаемые методические пособия
должны быть достаточными для выполнения студентами предусмотренного цикла лабораторных работ.
Практические работы
Практические работы проводятся в соответствии с предлагаемой тематикой. График
практических работ и тема предстоящей работы должны быть известны студенту заранее.
Студент обязан предварительно в ходе самостоятельной работы теоретически подготовиться к предстоящей практической работе в соответствии с методическими рекомендациями и предъявляемыми требованиям. К практической работе целесообразно организовать предварительный допуск по теме работы в виде кратковременного опроса в устной
или иной форме (например, кратковременного компьютерного тестирования) с целью выявления уровня подготовки студента. Результаты, полученные студентом во время выполнения практической работы, должны быть защищены преподавателю. Во время защиты
студент должен продемонстрировать необходимые теоретические знания по изучаемой
теме, практические навыки программирования, свободное понимание созданного программного кода.
Цикл практических занятий по дисциплине обеспечен учебно-методическим пособием.
9.2 Методические рекомендации по организации самостоятельной работы студентов
74
Пользуясь материалами лекций, рекомендуемой литературой и другими источниками, в
том числе источниками Интернет студентам рекомендуется самостоятельно закрепить полученные знания, а для студентов заочного обучения освоить самостоятельно значительное количество теоретического и практического материала.
Для самостоятельной работы могут быть вынесены как темы, которые в полном объеме и в доступной для понимания форме освещены в литературе, так и проблематичные
темы, требующие значительных усилий в их понимании. Для студентов заочного отделения самостоятельная работа является одной из основных форм изучения материала. Для
студентов дневного отделения самостоятельная работа может носить более индивидуальный характер. Сложные темы рекомендуется давать сильным студентам, обладающим хорошей подготовкой, которые могут использовать самостоятельную работу как опыт научно-исследовательской деятельности под руководством преподавателя. Самостоятельная
работа должна выполняться в соответствии с методическими рекомендациями и указаниями преподавателя, с периодическими консультациями и обсуждением результатов работы. Формы самостоятельной работы могут быть различны: работа студента с учебной литературой, поиск необходимой информации в Интернет, использование электронных
средств учебного назначения, периодических изданий. Результатом самостоятельной работы студента могут быть конспекты, рефераты, программы, презентации, выступление на
студенческой научной конференции, публикация и т.д.
В процессе учебной самостоятельной деятельности студентам предлагается использовать различные источники информации:
учебную литературу,
материалы прикладных разработок полученных в ходе работы в лаборатории информационных систем и технологий в рамках проведения НИР;
периодические издания по компьютерной технике и программированию, имеющиеся
в научной библиотеке ВУЗа;
материалы конференций в области информатики, вычислительной техники и управления;
электронные источники, в том числе источники Интернет.
9.3. Рекомендации по использованию информационных технологий
Материально-техническое обеспечение дисциплины:
- Операционная система MS Windows 7, Delphi XE3, MS Office
- Файловая архитектура персонального компьютера.
- компьютерное и мультимедийное оборудование;
- интернет-ресурсы
- оболочки языков программирования Turbo Pascal и ассемблер
10. Перечень информационных технологий, используемых при осуществлении образовательного процесса по дисциплине (модулю), включая перечень программного
обеспечения и информационных справочных систем (при необходимости)
В процессе лекционных и семинарских занятий используется следующее
программное обеспечение:
- программы, обеспечивающие доступ в сеть Интернет (например, «Googlechrome»);
- программы, демонстрации видео материалов (например, проигрыватель «
WindowsMediaPlayer»);
программы
для
демонстрации
и
создания
презентаций
(например,
«MicrosoftPowerPoint»).
75
Для решения практических задач используется статистический пакет программ
STATISTICA 6.0 RUS и табличный редактор MSExcel 2000.
11. Описание материально-технической базы, необходимой для осуществления образовательного процесса по дисциплине (модулю)
Лекционные занятия проводятся в аудитории, имеющей материальнотехническое обеспечение:
- компьютер модели Intel Celeron-S;
- монитор модели Samsung 793 DF;
- экран настенный стационарный;
- проектор модели Viewsonic PJ510;
- источник бесперебойного питания.;
- сервер модели Intel Xeon ;
- сервер модели 2x DualCore AMD Opteron 2218.
76
Related documents
Download