- •8.091402 “Системы управления и автоматики”
- •Введение
- •Порядок выполнения работы.
- •Задания на лабораторную работу.
- •Содержание отчета.
- •Контрольные вопросы.
- •Лабораторная работа №2 Изучение способов организации ветвлений и циклов на языке ассемблер
- •Цель работы
- •Указания по подготовке к выполнению лабораторной работы
- •Строковые операции
- •Копирование строки
- •Сравнение строк
- •Сканирование строки.
- •Чтение из строки
- •Запись в строку
- •Чтение строки из порта
- •Запись строки в порт
- •Рекомендации по выполнению лабораторной работы
- •Задания на лабораторную работу.
- •Содержание отчета.
- •Контрольные вопросы.
- •Искажение имен
- •Подключение библиотек
- •Задания на лабораторную работу.
- •Содержание отчета.
- •Контрольные вопросы.
- •Лабораторная работа №4 Управление памятью.
- •Цель работы
- •Указания по подготовке к выполнению лабораторной работы
- •Содержание отчета
- •В данной лабораторной работе необходимо выполнить следующее:
- •Задания на лабораторную работу.
- •Контрольные вопросы и задания
- •Задания на лабораторную работу.
- •Содержание отчета.
- •Контрольные вопросы.
- •Задания на лабораторную работу.
- •Задания на лабораторную работу.
- •Содержание отчета.
- •Контрольные вопросы.
- •Надруковано в учбово-виробничому
- •61166, Харкiв, просп. Ленiна, 14.
Задания на лабораторную работу.
Оформить код из лабораторной работы №1 в виде подпрограммы обработчика таймера, которая получает координаты точки (x, y, z) в глобальной структуре, высчитывает значение функции в этой точке и выводит его на экран. Написать вторую подпрограмму обработчик таймера, которая при каждом вызове таймера увеличивает значения каждой координаты на 1 и выводит их на экран. В коде основной программы установить 2 таймера, 1-й таймер вызывает подпрограмму – 1, а второй – 2. При этом попробовать варианты установки задержки таймера:
Периодичность вызова обоих таймеров – одинаковая.
Периодичность вызова первого таймера меньше чем второго.
Периодичность вызова первого таймера больше чем второго.
Содержание отчета.
Отчет должен содержать:
Цель работы, задание, описание алгоритма работы программы, распечатку исходных текстов программы с пояснениями, результаты, выводы с описанием сложностей возникших при выполнении работы.
Контрольные вопросы.
Что такое таймер?
Какие действия выполняются операционной системой при установке таймера ассоциированного с окном?
Какие действия выполняются операционной системой при установке таймера ассоциированного с подпрограммой?
Какие параметры обязательно должны быть переданы подпрограмме обработчика таймера?
Возможна ли обработка нескольких таймеров одной подпрограммой обработчиком?
Поясните результаты, полученные в ходе выполнения работы?
Лабораторная работа №6 Взаимодействие процессов с помощью каналов (pipes).
Цель работы
Ознакомление с функциональными возможностями систем программирования на языке ассемблер, структурой подпрограмм – осуществляющих взаимодействие с помощью каналов, особенностями передачи данных между процессами.
Указания по подготовке к выполнению лабораторной работы
При подготовке к выполнению лабораторной работы необходимо ознакомится с материалом лекций, который посвящен взаимодействию процессов с помощью каналов и их особенностям.
Рекомендации по выполнению лабораторной работы
Для выполнения лабораторной работы необходимо запустить среду разработки \masm32\QEDITOR и набрать в ней тексты программ. Общая структура консольной программы позволяющей взаимодействовать с другими процессами с помощью каналов (pipes) приведена в конспекте лекций.
Идея использования каналов очень проста. Канал как труба: с одной стороны в него втекает информация, а с другой вытекает. Создавая процесс, можно передать ему в качестве дескриптора ввода или вывода соответствующий дескриптор канала. После этого можно обмениваться информацией между двумя процессами при помощи функций WriteFile и ReadFile.
Для того чтобы запускаемый процесс вместо консоли использовал канал необходимо при его запуске вместо дескрипторов консоли указать дескрипторы уже созданного канала и разрешить наследование этих дескрипторов, как при создании канала, та и при запуске процесса. Наследование указывается в структуре SECURITY_ATTRIBUTES.
.data
attrib SECURITY_ATTRIBUTES <12, NULL, TRUE>
Для создания канала используется функция операционной системы CreatePipe. Данная функция создает канал и возвращает дескрипторы чтения и записи.
.data
hOwnWr DD ? ; Сюда пишет родитель
hOwnRd DD ? ; Отсюда читает родитель
Для того чтобы порождаемый процесс мог работать с созданным каналом, ему необходимо передать их копии. Для создания копий дескрипторов используется функция DuplicateHandle.
.data
hChildWr DD ? ; Сюда пишет дитя
hChildRd DD ? ; Отсюда читает дитя
.code
call GetCurrentProcess
mov ebx, eax
push DUPLICATE_SAME_ACCESS
push FALSE
push 0
push offset hOwnWr
push ebx
push hChildWr
push ebx
call DuplicateHandle
Аналогично и для дескриптора чтения.
Прежде чем запускать процесс необходимо объявить и заполнить две структуры.
.data
piProcInfo PROCESS_INFORMATION <?>
siStartInfo STARTUPINFO <?>
cmdLine DB "ChildProc.exe", 0
При заполнении структур надо указать вместо стандартных дескрипторов ввода-вывода копии дескрипторов каналов. После чего запустить процесс функцией CreateProcess.
Обобщенный алгоритм работы родительского процесса можно описать следующим образом.
Создать канал и сохранить дескрипторы ввода-вывода.
Получить копии дескрипторов.
Запустить новый процесс с указанием «наследовать дескрипторы» и передать ему вместо стандартных дескрипторов ввода-вывода копии дескрипторов канала.
Записать данные в канал.
Ждать когда порожденный процесс вернет результат.
Вывести возвращенные данные на экран.
Обобщенный алгоритм работы дочернего процесса можно описать следующим образом.
Получить дескрипторы стандартного ввода-вывода.
Ждать данные из стандартного устройства ввода.
Получить данные.
Вычислить результат.
Записать данные в стандартное устройство вывода.
Для определения того, что данные записаны в канал и их можно читать рекомендуется использовать объекты синхронизации – мьютексы, семафоры, события.