Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Asm_lab-Rus.docx
Скачиваний:
6
Добавлен:
27.08.2019
Размер:
238.79 Кб
Скачать
    1. Задания на лабораторную работу.

  1. Оформить код из лабораторной работы №1 в виде подпрограммы обработчика таймера, которая получает координаты точки (x, y, z) в глобальной структуре, высчитывает значение функции в этой точке и выводит его на экран. Написать вторую подпрограмму обработчик таймера, которая при каждом вызове таймера увеличивает значения каждой координаты на 1 и выводит их на экран. В коде основной программы установить 2 таймера, 1-й таймер вызывает подпрограмму – 1, а второй – 2. При этом попробовать варианты установки задержки таймера:

    1. Периодичность вызова обоих таймеров – одинаковая.

    2. Периодичность вызова первого таймера меньше чем второго.

    3. Периодичность вызова первого таймера больше чем второго.

    1. Содержание отчета.

Отчет должен содержать:

Цель работы, задание, описание алгоритма работы программы, распечатку исходных текстов программы с пояснениями, результаты, выводы с описанием сложностей возникших при выполнении работы.

    1. Контрольные вопросы.

  1. Что такое таймер?

  2. Какие действия выполняются операционной системой при установке таймера ассоциированного с окном?

  3. Какие действия выполняются операционной системой при установке таймера ассоциированного с подпрограммой?

  4. Какие параметры обязательно должны быть переданы подпрограмме обработчика таймера?

  5. Возможна ли обработка нескольких таймеров одной подпрограммой обработчиком?

  6. Поясните результаты, полученные в ходе выполнения работы?

  1. Лабораторная работа №6 Взаимодействие процессов с помощью каналов (pipes).

    1. Цель работы

Ознакомление с функциональными возможностями систем программирования на языке ассемблер, структурой подпрограмм – осуществляющих взаимодействие с помощью каналов, особенностями передачи данных между процессами.

    1. Указания по подготовке к выполнению лабораторной работы

При подготовке к выполнению лабораторной работы необходимо ознакомится с материалом лекций, который посвящен взаимодействию процессов с помощью каналов и их особенностям.

    1. Рекомендации по выполнению лабораторной работы

Для выполнения лабораторной работы необходимо запустить среду разработки \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.

Обобщенный алгоритм работы родительского процесса можно описать следующим образом.

  1. Создать канал и сохранить дескрипторы ввода-вывода.

  2. Получить копии дескрипторов.

  3. Запустить новый процесс с указанием «наследовать дескрипторы» и передать ему вместо стандартных дескрипторов ввода-вывода копии дескрипторов канала.

  4. Записать данные в канал.

  5. Ждать когда порожденный процесс вернет результат.

  6. Вывести возвращенные данные на экран.

Обобщенный алгоритм работы дочернего процесса можно описать следующим образом.

  1. Получить дескрипторы стандартного ввода-вывода.

  2. Ждать данные из стандартного устройства ввода.

  3. Получить данные.

  4. Вычислить результат.

  5. Записать данные в стандартное устройство вывода.

Для определения того, что данные записаны в канал и их можно читать рекомендуется использовать объекты синхронизации – мьютексы, семафоры, события.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]