Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2014- СП 3.0 ЛАБЫ ОБЯЗАТ.doc
Скачиваний:
99
Добавлен:
01.03.2016
Размер:
896 Кб
Скачать
    1. Состав отчета по работе

  1. Номер и название работы, фамилия и группа студента.

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

  2. Протокол выполнения работы с текстами ответов на все вопросы в заданиях пункта «Выполнение работы».

  3. Выводы по работе.

    1. Вопросы для самопроверки

  1. Что такое макроопределение?

  2. Как выполняется расширение макроопределения с параметрами?

  3. Как обеспечивается уникальность меток в исходном тексте при многократных вставках одного и того же макроса с метками?

  4. Как получить расширенный листинг компиляции ассемблерного модуля?

  5. Как происходит расширение макровызова invoke?

  1. КОНСОЛЬНЫЙ ВВОД-ВЫВОД

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

Изучить основные возможности ввода-вывода, применяемые в консольных приложениях Windows.

    1. Теоретические сведения

      1. Основы взаимодействия прикладных программ и ОС Windows

Структура логических уровней компьютера может быть упрощенно показана как на рис. 6.1:

Прикладные программы

Программный интерфейс приложений (АРI) Win32

Уровень операционной системы

Ядро ОС

Уровень абстрагирования от аппаратуры (HAL)

Аппаратура и периферийные устройства

*** *** *** Внешний мир *** *** ***

Рисунок 6.1 – Логические уровни компьютера

Прикладная программа обрабатывает данные за счет собственных ресурсов и при помощи своего алгоритма. Но всякое «общение» программы с внешним миром (пользователь – это тоже часть внешнего для программы мира) производится только с помощью ввода с периферийных устройств и вывода на них. В целях защиты компьютерной системы прикладные программы изолированы от прямого управления аппаратурой и для вывода-ввода должны запрашивать сервис от операционной системы. Запросы подобного рода производятся вызовами процедур и функцийпрограммного интерфейса приложений(Application Program Interface, API), который в ОС Microsoft Windows имеет официальное имя Win32 (илиWin64). Их неформально еще называют «WinAPI». Чтобы вызовы API стали возможны и выполнялись правильно, при написании программы в ней следует прописывать директивы доступа к соответствующим прототипам и библиотекам (файлам типов inc и lib). Все примеры из пакета MASM32, рассматриваемые нами в лабораторных работах, подобные директивы имеют.

      1. Потоки вывода и ввода

В ОС Windows, как и во многих других, в отношении ввода-вывода применяется абстракция «файл». В информатике, в самой общей трактовке, используют следующее определение: файл — это поименованная линейная последовательность байтов. В файловых системах доступ к файлам осуществляется посредством использования их имен. Файлы, вообще говоря, допускают с собой всего два действия – чтение данных из них, и запись данных в них. Тщательно и универсально прописав алгоритмические механизмы всего этих двух действий, программисты получили в распоряжение очень универсальные и удобные инструменты обмена данными. Настолько универсальные и удобные, что разработчики операционных систем теперь стараются их использовать везде, где есть необходимость обмениваться данными. Поэтому как «файлы» используются, кроме настоящих дисковых файлов, следующие сущности:

  • области данных (необязательно на диске);

  • устройства (порты - как физические, так и виртуальные);

  • потоки данных («именованный канал»);

  • сетевые ресурсы, сокеты;

  • другие объекты операционной системы.

В ОС Windows c открытым файлом (и не только с файлами) связывается манипулятор («handle», жаргонное «хандлер»). Это индекс в таблице описателей объектов, с которыми работает ОС. То есть, если пользователь (его программа) желает получить доступ к файлу, то нужно сначала знать индекс («хандлер») описателя этого файла. «Описатель файла» – это структура, в которой записаны все свойства файла – его имя, права доступа к нему, режимы чтения/записи/дозаписи/перезаписи, указатель на буфер обмена, флаги блокировки и т.п. Механизм доступа, таким образом, следующий. По индексу-манипулятору (хандлеру) читается описатель. По полям описателя определяют, доступен ли файл. По полю-указателю описателя переходят на буфер файла в памяти, в нём по известному смещению читают/пишут байты. Забота про обмен данными между буфером и самим физическим файлом не входит в область ответственности программ, этим занимается контроллер файла.

Если на абстрактный объект вида «последовательный файл» накладывается еще дополнительное ограничение – запрет на обратное перемещениеотносительно текущей позиции в файле, то получается еще одна часто используемая информационная абстракция – «файловый поток» или просто «поток». Получается, что из входного потока можно только читать всё новые и новые порции данных, но повторно перечитать ранее прочитанное нельзя. Аналогично, в выводной поток можно передавать все новые и новые данные, но «перемотать поток назад» и переписать часть его содержимого по-другому нельзя. Нетрудно видеть, что всё это очень похоже на события, которые в реальном мире связаны со временем их совершения (во времени обратно двигаться нельзя по физике нашего мира, а в потоке – по договоренности, но аналогия есть). Абстракция «поток» и придумана для моделирования «событий во времени».