Главная » Просмотр файлов » assembler. Учебник для вузов_Юров В.И_2003 -637с

assembler. Учебник для вузов_Юров В.И_2003 -637с (862834), страница 87

Файл №862834 assembler. Учебник для вузов_Юров В.И_2003 -637с (Юров В.И - Assembler. Учебник для вузов. 2003) 87 страницаassembler. Учебник для вузов_Юров В.И_2003 -637с (862834) страница 872021-12-22СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 87)

Директива условной компиляции(строка 8) проверяет текущую версию операционной системы. Если это Windows95/98 или NT, то можно использовать расширенные (с суффиксами Ех) вариантыфункций Win32 API. Они обладают дополнительными возможностями по сравнению со старыми вариантами функций Win32 API. Исчерпывающим источникоминформации по функциям Win32 API (и не только) является MSDN (MicrosoftDeveloper Network — информационная система поддержки разработчика по продуктам Microsoft), его можно найти в Интернете по адресу http://www. microsoft.com/msdn/.Строка 35.

В соответствии с соглашениями операционной системы Windows,оконная функция приложения должна быть видимой за пределами приложения,в котором она описана. Это связано с тем, что оконная функция вызывается самойоперационной системой Windows при поступлении сообщений для данного приложения. По этой причине оконная функция нашего каркасного приложения объявлена общей (public).Строки 36-50 содержат описание сегмента данных, в котором определяютсяпеременные и экземпляры структур, используемые в каркасном приложении.Упомянем еще об одном важном техническом моменте программирования дляоперационной системы Windows — соглашениях об именовании различных программных объектов. Обозначениям в Windows придается большое значение.

Этообъясняется сложностью разрабатываемых систем, а также тем, что пользователии разработчики должны понимать друг друга при создании как программных продуктов, так и документации к ним. Без согласованных правил по обозначению техили иных объектов им не обойтись. Единых требований на этот счет нет. В настоящее время де-факто в качестве системы обозначений принята так называемаяформа венгерской записи. Более подробные сведения о ней с указанием первоисточника приведены в файле \Lessonl6\Hungarian Notation.htm, который находитсясреди файлов, прилагаемых к книге. Не стоит принимать венгерскую форму записи за некую догму. Это всего лишь одна из возможных систем обозначений. Прижелании вы можете ввести свою собственную систему. Для того чтобы заставитьКаркасное Windows-приложение на ассемблере387компилятор ассемблера различать строчные и прописные буквы, необходимо указать ключ /ml в командной строке.Перед рассмотрением сегмента кода обратите внимание на его начало (строка 51).

В нем отсутствуют привычные команды загрузки сегментного регистра данных. Загрузчик Windows самостоятельно загружает сегментные регистры, при этомучитывается требуемая модель памяти (директива .model). В первой части главымы упоминали, что для запуска приложения под управлением Windows необходимо выполнить нескольких шагов, в которых выполняется вызов ряда функцийWin32 API. Перечислим их.1. Выполнение стартового кода.2. Выполнение главной функции (в C/C++ — вызов функции WinMain), котораявыполняет следующие действия:1) регистрирует класс окна;2) создает окно;3) отображает окно;4) запускает цикл обработки сообщений;5) завершает выполнение приложения.3.

Организация обработки сообщений в оконной процедуре.А как вызывать функции Win32 API в программе на ассемблере? Вызов этихфункций осуществляется аналогично вызову внешних функций (см. главу 15).Передача всех параметров осуществляется через стек. По этой причине важно знатьразмеры передаваемых величин. Здесь проявляется полезность венгерской системы обозначений.

О размере переменной можно судить по ее названию. К тому жев Win32 большинство переменных имеет размер двойного слова (четыре байта).В соответствии с параметром stdcall директивы .MODEL параметры в стек должны помещаться справа налево, то есть первым в стек идет последний параметр функции.Продолжим рассмотрение каркасного Windows-приложения (см. листинг 16.4).Стартовый кодСтруктура нашего каркасного Windows-приложения строится в соответствиис аналогичным приложением на C/C++ (см. листинг 16.1) и его дизассемблированным вариантом (см.

листинг 16.3). Разрабатывая приложение на C/C++, мы«прячемся за спину» компилятора, доверяя ему часть работы. Программируя наассемблере, мы лишаемся этой «широкой спины» и вынуждены всю работу делатьсами. Что представляет собой эта работа, видно из листинга 16.3. Первый шагWindows-приложения заключается в исполнении стартового кода (строки 54-73).Стартовый код представляет собой последовательный вызов функций Win32 API.Вы можете экспериментировать с ними при разработке своих программ (например, для доступа к информации о параметрах командной строки или переменныхокружения), но в общем случае использовать большинство из них не обязательно.Чтобы продемонстрировать это, в листинге 16.4 вызов некоторых функций стартового кода закомментирован. В этой программе из всего стартового кода мы оставили лишь вызов функции GetModuleHandleA (который, кстати, тоже можно за-388Глава 16.

Создание Windows-приложений на ассемблерекомментировать без потери работоспособности программы). Она предназначенадля идентификации исполняемого файла в адресном пространстве процесса. Здесьнужно кое-что пояснить.В литературе по платформе Win32 часто встречаются такие понятия, как процесс и поток. Процесс (приложение) представляет собой экземпляр программы,загруженной в память для выполнения. Процесс инертен, он просто владеет пространством памяти в 4 Гбайт. В этом пространстве содержатся код и данные, другие ресурсы, загружаемые в адресное пространство процесса. В качестве ресурсовмогут быть, в свою очередь, исполняемые файлы или библиотеки DLL.

Для тогочтобы процесс исполнялся, в нем должен быть создан поток, который, собственно,и отвечает за исполнение кода, содержащегося в адресном пространстве процесса.Зачем такие сложности? Дело в том, что Win32 по сравнению со своими предшественниками кроме процессной многозадачности поддерживает еще и потоковую многозадачность, при которой в рамках одного процесса параллельно запускаются несколько потоков. Таким образом, в рамках одной программы виртуальновыполняются несколько фрагментов кода. В принципе, имея несколько процессоров, возможно реальное распараллеливание вычислительного процесса в рамкаходного приложения.Из-за того что в адресное пространство процесса можно загрузить несколькофайлов, для работы с ними требуется некий механизм их однозначной идентификации.

При загрузке исполняемого файла (или библиотеки DLL) в адресное пространство процесса ему присваивается уникальный номер. Этот номер передаетсяоперационной системой в качестве первого параметра hlnst (Handle Instance —описатель экземпляра) функции WinMain в программе на языке C/C++. Это значение используется впоследствии при вызове многих функций Win32 API, загружающих те или иные ресурсы для данной программы. Что касается значения, присваиваемого hlnst, то оно равно базовому адресу в адресном пространстве процесса,по которому загружен данный файл с расширением .ехе.

Выяснить его значениеможно с помощью функции GetModuleHandle. При вызове этой функции в качествеее единственного параметра передается адрес ASCIIZ-строки с именем исполняемого файла (библиотеки DLL), базовый адрес загрузки (значение hlnst) которогомы хотим получить. Если вызвать функцию GetModuleHandle, передав ей значениеNULL, то мы получим значение hlnst для текущей программы, что, кстати, и делаетстартовый код (см. листинг 16.3) в программе листинга 16.1. Важно отметить, чтоэта идентификация актуальна только в рамках одного процесса.Как правило, в системе существует по крайней мере несколько процессов, владеющих своим четырехгигабайтным адресным пространством и имеющих исполняемые файлы с одинаковыми идентификаторами.

Причина в том, что в Win32адресные пространства процессов разделены, и каждый из этих процессов полагает, что он в системе один.Фрагмент кода с вызовом GetModuleHandleA выглядит так:.datahinst.codepushcallmovdd00GetModuleHandleAhinst, eaxКаркасное Windows-приложение на ассемблере389После этого кода вызывается главная функция приложения — WinMain (см. листинг 16.3).Главная функцияОсновная задача главной функции (строки 74-162) оконного Windows-приложения состоит в правильной инициализации программы и корректном ее завершении.

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

Класс окна можно впоследствиииспользовать для создания окон приложения функцией CreateWindow. Характеристики окна описываются с помощью специальной структуры WNDCLASS (или ее расширенного варианта WNDCLASSEX в Win32).В сегменте данных в строке 41 листинга 16.4 определен экземпляр структурыWNDCLASSEX— wcl. Первое поле структуры WNDCLASSEX cbSize должно содержатьдлину структуры. Команда в строке 80 загружает в это поле соответствующее значение.

В поле style можно определять стиль границ окна и его поведение при перерисовке. Значение стиля является целочисленным и формируется из констант.Каждая константа означает некоторую предопределенную характеристику. Включаемый файл winuser.h компилятора VC++ содержит символические названия этихконстант. Эти же константы, но уже в соответствии с требованиями синтаксисаассемблера, описаны в файле windowsA.inc. В строке 81 листинга 16.4 комбинацияконстант CS_HREDRAW и CS_VREDRAW определяет необходимость полной перерисовки окна при изменении его вертикального или горизонтального размера.В строке 80 в поле IpfnWndProc записывается адрес оконной функции.

С помощьюэтой функции все окна, созданные позднее функцией CreateWindow на основе класса, для которого выполняется регистрация, будут обрабатывать посланные им сообщения.Поля cbClsExtra и cbWndExtra служат для указания количества байтов, дополнительно резервируемых в структуре класса окна WNDPROC и структуре параметровокна, которая поддерживается внутри самой системы Windows. Обычно эти поляинициализированы нулевыми значениями.Строка 85 формирует в ноле hlnstance дескриптор приложения, полученныйранее функцией GetModuleHandleA.В строках 86-95 в поля hlcon и hCursor загружаются дескрипторы значка и указателя мыши.

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

Характеристики

Тип файла
PDF-файл
Размер
14,34 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6384
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее