Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
заочникиОС / Лабораторные работы / Лабораторная работа № 6.doc
Скачиваний:
63
Добавлен:
17.04.2015
Размер:
95.74 Кб
Скачать

Лабораторная работа № 6 Программирование с помощью функций win32 api

Цель работы: приобретение навыков программирования с помощью функцийWIN32API.

Теоретическая часть

Win32 API (расшифровывается как интерфейс прикладных программ) – это набор подпрограмм-функций, на которых построена операционная система WINDOWS, которая использует 32х-битнуюадресацию. Разработчики WINDOWS сделали много усилий, чтобы стандартизировать как названия функций, так и их параметры. Потому использовать их не так тяжело, если усвоить некоторые общие концепции.

Большинство функций для Windowsнаписаны на многих языках программирования, в том числе и на ассемблере. Число этих функций расширяется при переходе к следующей версииWindows, таким образом, обеспечивается совместимость разработанных ранее программ с новыми версиями операционной системы. Существуют и функции, которые не отображены в документации, или для своего применения требуют от программы специальных прав доступа к памяти. Суть функцийAPIможно понять, если представить, из каких файлов они вызываются и на какие группы эти функции разделяются. Ассемблер - это как раз то удобное и простое средство, которое позволит вам обращаться непосредственно к любой функцииAPI, которая находится вDLL-файле.

Изучение операционной системы через программирование на ассемблере заключается в том, что сам ассемблер не налагает никаких ограничений на программу и данные, с которыми она работает. Это должен делать сам программист с целью защиты операционной системы от своих некорректных действий. Таким образом, основной целью системного программирования является написание корректных программ с неограниченными возможностями (в рамках операционной системы). Для сохранения корректности мы будем пользоваться определенными правилами программирования, которые будут понятны на конкретных примерах.

Ассемблер

Ассемблер (assemble– собирать) –компиляторсязыка ассемблерав командымашинного языка. Ассемблер создан как замена двоичному коду, который понимает процессор. Наиболее известными ассемблерами для операционной системы DOS являлись Borland Turbo Assembler (TASM) и Microsoft Macro Assembler (MASM). При появлении операционной системы Microsoft Windows появилось расширение TASM, именуемое TASM32, позволившее создавать программы для выполнения в среде Windows. Пример команды: MOV EAX, EBX

В машинных кодах это будет 8BC3 (шестнадцатеричный код).

Общая структура программы

.386 ;тип процессора .model flat, stdcall ; модель памяти и вызова подпрограмм ;объявление включаемых (заголовочных) файлов, ;макросов, ;макроопределений, ;также внешних определений          .data ;инициализированные данные          .data? ;неинициализированные данные          .const ;константы          .code ;исполняемый код          End <метка точки входа>  

Тип процессора обычно всегда указывают 386, а также модель памяти всегда flat. Вызов подпрограмм обычно всегда stdcall – стандарт вызова почти всех API функций. Секция .data – секция с инициализированными данными она включается в исполняемый файл. Секция .data? – секция с неинициализированными данными, она не включается в исполняемый файл и появляется только тогда, когда программа загружается в память. Секция .const – секция констант. Секция .code содержит исполняемый код программы. В конце программы всегда должно стоять слово end, которая задаёт точку входа программы, т.е. место с которого начнётся выполняться программа. Секции .data, .data? имеют полный доступ. Секции .const и .code имеют атрибут доступа - только чтение. Секция .const наиболее редко встречается в программах, так как константы можно задавать с помощью макроопределений.