Главная страница
Навигация по странице:

  • «Построение модуля динамической структуры» Цель работы

  • Порядок выполнения работы

  • Шаг 5.

  • Контрольные вопросы по лабораторной работе №6

  • ЛАБОРАТОРНАЯ РАБОТА № 7 «Построение модуля оверлейной структуры» Цель работы

  • Шаг 2.

  • Шаг 4.

  • Шаг 6.

  • AX=4B03h - код функции; DS:DX - указывает на строку ASCIIZ, содержащую путь к оверлею ;

  • AH=49h - код функции; ES - сегментный адрес освобождаемой памяти. Оверлейный сегмент не является загрузочным модулем типов .СОМ

  • Контрольные вопросы по лабораторной работе №7

  • MetodUkОС. Методические указания к лабораторным работам по дисциплине "Операционные системы " СанктПетербург 2011 введение


    Скачать 289.53 Kb.
    НазваниеМетодические указания к лабораторным работам по дисциплине "Операционные системы " СанктПетербург 2011 введение
    Дата08.10.2022
    Размер289.53 Kb.
    Формат файлаpdf
    Имя файлаMetodUkОС.pdf
    ТипМетодические указания
    #721556
    страница3 из 3
    1   2   3
    Контрольные вопросы по лабораторной работе №5
    1) Какого типа прерывания использовались в работе?
    2) Чем отличается скан код от кода ASCII?

    ЛАБОРАТОРНАЯ РАБОТА № 6
    «Построение модуля динамической структуры»
    Цель работы: Исследование возможности построения загрузочного модуля динамической структуры. В отличии от предыдущих лабораторных работ в этой работе рассматривается приложение, состоящее из нескольких модулей, а не из одного модуля простой структуры. В этом случае разумно предположить, что все модули приложения находятся в одном каталоге и полный путь в этот каталог можно взять из среды, как это делалось в работе 2. Понятно, что такое приложение должно запускаться в соответствии со стандартами ОС.
    В работе исследуется интерфейс между вызывающим и вызываемым модулями по управлению и по данным. Для запуска вызываемого модуля используется функция 4B00h прерывания int 21h. Все загрузочные модули находятся в одном каталоге. Необходимо обеспечить возможность запуска модуля динамической структуры из любого каталога.
    Порядок выполнения работы
    Шаг 1. Для выполнения лабораторной работы необходимо написать и отладить программный модуль типа .ЕХЕ, который выполняет функции:
    1) Подготавливает параметры для запуска загрузочного модуля из того же каталога,
    в котором находится он сам. Вызываемому модулю передается новая среда,
    созданная вызывающим модулем и новая командная строка.
    2) Вызываемый модуль запускается с использованием загрузчика.
    3) После запуска проверяется выполнение загрузчика, а затем результат выполнения вызываемой программы. Необходимо проверять причину завершения и, в зависимости от значения, выводить соответствующее сообщение. Если причина завершения 0, то выводится код завершения.
    В качестве вызываемой программы необходимо взять программу ЛР 2, которая распечатывает среду и командную строку. Эту программу следует немного модифицировать, вставив перед выходом из нее обращение к функции ввода символа с клавиатуры. Введенное значение записывается в регистр AL и затем происходит обращение к функции выхода 4Сh прерывания int 21h.
    Шаг 2. Запустите отлаженную программу, когда текущим каталогом является каталог с разработанными модулями. Программа вызывает другую программу, которая останавливается, ожидая символ с клавиатуры.
    Введите произвольный символ из числа A-Z. Посмотрите причину завершения и код.
    Занесите полученные данные в отчет.
    Шаг 3. Запустите отлаженную программу, когда текущим каталогом является каталог с разработанными модулями. Программа вызывает другую программу, которая останавливается, ожидая символ с клавиатуры.
    Введите комбинацию символов Ctrl-C. Посмотрите причину завершения и код.
    Занесите полученные данные в отчет.
    Шаг 4. Запустите отлаженную программу, когда текущим каталогом является какой- либо другой каталог, отличный от того, в котором содержатся разработанные программные модули.
    Повторите ввод комбинаций клавиш. Занесите полученные данные в отчет.
    Шаг 5. Запустите отлаженную программу, когда модули находятся в разных каталогах. Занесите полученные данные в отчет.

    Необходимые сведения для составления программы
    Для загрузки и выполнения одной программы из другой используется функция
    4B00h прерывания int 21h (загрузчик ОС). Перед обращением к этой функции необходимо выполнить следующие действия:
    1) Подготовить место в памяти. При начальном запуске программы ей отводится вся доступная в данный момент память OS, поэтому необходимо освободить место в памяти.
    Для этого можно использовать функцию 4Ah прерывания int 21h. Эта функция позволяет уменьшить отведенный программе блок памяти. Перед вызовом функции надо определить объем памяти, необходимый программе ЛР6 и задать в регистре ВХ число параграфов,
    которые будут выделяться программе. Если функция 4Ah не может быть выполнена, то устанавливается флаг переноса CF=1 и в АХ заносится код ошибки:
    7 - разрушен управляющий блок памяти;
    8 - недостаточно памяти для выполнения функции;
    9 - неверный адрес блока памяти.
    Поэтому после выполнения каждого прерывания int 21h следует проверять флаг переноса CF=1.
    2) Создать блок параметров. Блок параметров - это 14-байтовый блок памяти, в который помещается следующая информация:
    dw сегментный адрес среды dd сегмент и смещение командной строки dd сегмент и смещение первого FCB
    dd сегмент и смещение второго FCB
    Если сегментный адрес среды 0, то вызываемая программа наследует среду вызывающей программы. В противном случае вызывающая программа должна сформировать область памяти в качестве среды, начинающуюся с адреса кратного 16 и поместить этот адрес в блок параметров.
    Командная строка записывается в следующем формате:
    первый байт - счетчик, содержащий число символов в командной строке, затем сама командная строка, содержащая не более 128 символов.
    На блок параметров перед загрузкой вызываемой программы должны указывать
    ES:BX.
    3) Подготовить строку, содержащую путь и имя вызываемой программы. В конце строки должен стоять код ASCII 0. На подготовленную строку должны указывать DS:DX.
    4) Сохранить содержимое регистров SS и SP в переменных. При восстановлении SS и SP нужно учитывать, что DS необходимо также восстановить.
    Когда вся подготовка выполнена, вызывается загрузчик OS следующей последовательностью команд:
    mov AX,4B00h int 21h
    Если вызываемая программа не была загружена, то устанавливается флаг переноса
    CF=1 и в AX заносится код ошибки:
     1 - если номер функции неверен;
     2 - если файл не найден;
     5 - при ошибке диска;
     8 - при недостаточном объеме памяти;
     10 - при неправильной строке среды;
     11 - если не верен формат.
    Если CF=0, то вызываемая программа выполнена и следует обработать ее завершение. Для этого необходимо воспользоваться функцией 4Dh прерывания int 21h. В
    качестве результата функция возвращает в регистре AH причину, а в регистре AL код завершения.
    Причина завершения в регистре AH представляется следующими кодами:

     0 - нормальное завершение;
     1 - завершение по Ctrl-Break;
     2 - завершение пo ошибке устройства;
     3 - завершение по функции 31h, оставляющей программу резидентной.
    Код завершения формируется вызываемой программой в регистре AL перед выходом в OS с помощью функции 4Ch прерывания int 21h.
    В качестве вызываемой программы целесообразно использовать программу,
    разработанную в Лабораторной работе №2, модифицировав ее следующим образом. Перед выходом из программы перед выполнением функции 4Ch прерывания int 21h следует запросить с клавиатуры символ и поместить введенный символ в регистр AL, в качестве кода завершения. Это можно сделать с помощью функции 01h прерывания int 21h.
    mov AH,01h int 21h
    Введенный символ остается в регистре AL и служит аргументом для функции 4Ch прерывания int 21h.
    Контрольные вопросы по лабораторной работе №6
    1) Как реализовано прерывание Ctrl-C?
    2) В какой точке заканчивается вызываемая программа, если код причины завершения 0?
    3) В какой точке заканчивается вызываемая программа по прерыванию Ctrl-C?

    ЛАБОРАТОРНАЯ РАБОТА № 7
    «Построение модуля оверлейной структуры»
    Цель работы: Исследование возможности построения загрузочного модуля оверлейной структуры. Исследуется структура оверлейного сегмента и способ загрузки и выполнения оверлейных сегментов. Для запуска вызываемого оверлейного модуля используется функция 4B03h прерывания int 21h. Все загрузочные и оверлейные модули находятся в одном каталоге.
    В этой работе также рассматривается приложение, состоящее из нескольких модулей, поэтому все модули помещаются в один каталог и вызываются с использованием полного пути.
    Порядок выполнения работы
    Шаг 1. Для выполнения лабораторной работы необходимо написать и отладить программный модуль типа .ЕХЕ, который выполняет функции:
    1) Освобождает память для загрузки оверлеев.
    2) Читает размер файла оверлея и запрашивает объем памяти, достаточный для его загрузки.
    3) Файл оверлейного сегмента загружается и выполняется.
    4) Освобождается память, отведенная для оверлейного сегмента.
    5) Затем действия 1)-4) выполняются для следующего оверлейного сегмента.
    Шаг 2. Также необходимо написать и отладить оверлейные сегменты. Оверлейный сегмент выводит адрес сегмента, в который он загружен.
    Шаг 3. Запустите отлаженное приложение. Оверлейные сегменты должны загружаться с одного и того же адреса, перекрывая друг друга.
    Шаг 4. Запустите приложение из другого каталога. Приложение должно быть выполнено успешно.
    Шаг 5. Запустите приложение в случае, когда одного оверлея нет в каталоге.
    Приложение должно закончиться аварийно.
    Шаг 6. Занесите полученные результаты в виде скриншотов в отчет. Оформите отчет в соответствии с требованиями.
    Необходимые сведения для составления программы
    Для организации программы, имеющей оверлейную структуру, используется функция 4B03h прерывания int 21h. Эта функция позволяет в отведенную область памяти,
    начинающуюся с адреса сегмента, загрузить программу, находящуюся в файле на диске.
    Передача управления загруженной программе этой функцией не осуществляется и префикс сегмента программы (PSP) не создается. Обращение к функции 4B03h:
    AX=4B03h - код функции;
    DS:DX - указывает на строку ASCIIZ, содержащую путь к оверлею;
    ES:BX - указатель на блок параметров, который представляет
    собой два слова памяти, содержащих сегментный адрес
    загрузки программы.
    Если флаг переноса CF=1 после выполнения функции, то произошли ошибки и регистр AX содержит код ошибки. Значение регистра AX характеризует следующие ситуации:
    -
    1 - несуществующая функция;
    -
    2 - файл не найден;
    -
    3 - маршрут не найден;
    -
    4 - слишком много открытых файлов;
    -
    5 - нет доступа;
    -
    8 - мало памяти;

    -
    10 - неправильная среда.
    Если флаг переноса CF=0, то оверлей загружен в память.
    Перед загрузкой оверлея вызывающая программа должна освободить память по функции 4Ah прерывания int 21h. Затем определить размер оверлея. Это можно сделать с помощью функции 4Eh прерывания 21h. Перед обращением к функции необходимо определить область памяти размером в 43 байта под буфер DTA, которую функция заполнит, если файл будет найден.
    Функция использует следующие параметры:
    CX - значение байта атрибутов, которое для файла имеет значение 0;
    DS:DX - указатель на путь к файлу, который записывается в формате строки ASCIIZ.
    Если флаг переноса CF=1 после выполнения функции, то произошли ошибки и регистр AX содержит код ошибки. Значение регистра AX характеризует следующие ситуации:
    -
    2 - файл не найден;
    -
    3 - маршрут не найден.
    Если CF=0, то в области памяти буфера DTA со смещением 1Ah будет находится младшее слово размера файла, а в слове со смещением 1Ch - старшее слово размера памяти в байтах.
    Полученный размер файла следует перевести в параграфы, причем следует взять большее целое числа параграфов. Затем необходимо отвести память с помощью функции
    48h прерывания 21h. После этого необходимо сформировать параметры для функции
    4B03h и выполнить ее.
    После отработки оверлея необходимо освободить память с помощью функции 49h прерывания int 21h. Обращение к этой функции содержит следующие параметры:
    AH=49h - код функции;
    ES - сегментный адрес освобождаемой памяти.
    Оверлейный сегмент не является загрузочным модулем типов .СОМ или .ЕХЕ. Он представляет собой кодовый сегмент, который оформляется в ассемблере как функция с точкой входа по адресу 0 и возврат осуществляется командой RETF. Это необходимо сделать, потому что возврат управления должен быть осуществлен в программу,
    выполняющую оверлейный сегмент. Если использовать функции выхода 4Сh прерывания int 21h, то программа закончит свою работу.
    Контрольные вопросы по лабораторной работе №7
    1)
    Как должна быть устроена программа, если в качестве оверлейного сегмента использовать .СОМ модули?

    Литература
    Р. Джордейн. Справочник программиста. - М., «Финансы», 1991г.
    Рудаков П.И, Финогенов К.Г. Язык ассемблера: уроки программирования. – М.;
    «Диалог-МИФИ», 2001, 640с.
    http://www.cyberdengi.com/FoundationsOfAssembler/Theme01.html http://www.codenet.ru/progr/dos/int_0009.php
    1   2   3


    написать администратору сайта