Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Include Windows. Inc. Model large, Windows Pascal




Model large, WINDOWS PASCAL

End start

Mov ax, 4c00h

Mov ax, 4CFFh

Or ax, ax

Call INITAPP, hInstance

Mov hInstance, di

Or ax, ax

Call INITTASK

Code

Freespace db 16 dup(0)

Data

Include windows.inc

Вывод информации в дочернее окно

ПРОГРАММНОЕ УПРАВЛЕНИЕ ПЕРИФЕРИЙНЫМИ УСТРОЙСТВАМИ

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

Создание приложение для Windows в общем случае имеет больше стадий чем для Dos. Это объясняется тем, что при компоновке Windows-программы в нее включается не только код исходных модулей, но и ресурсы. Создание программы для Windows должно содержать следующие этапы:

– разработка исходного текста программы;

– создание ресурсов, которые используются программой;

– создание текстового файла описания используемых ресурсов;

– создание текстового файла описания программного модуля;

– компиляция и компоновка программы с использованием файла описания программного модуля;

– компиляция файла ресурсов и включение его в готовый исполняемый файл.

Будем использовать компилятор и компоновщик фирмы Borland–Turbo Assembler и Turbo Link версии 5.0.

 

Пример

Файл hello.asm


.model large, WINDOWS PASCAL

; Подключаем файл где описаны константы;(типа "MB_OK",;"MB_ICONEXCLAMATION")

; Будем использовать функцию API Mes;sageBox

extrn MESSAGEBOX:proc

; Сегмент данных

; Пустое место для информации Program;Manager

; Заголовок диалогового окна

lpszTitle db 'Generic Sample Assembly Application', 0

; Текст диалогового окна

lpszText db 'Hello World!', 0

; Сегмент кода

; точка входа в программу (На самом деле;WinMain)

start:

; Инициализируем задачу и получаем вход;ные параметры

; Если инициализация прошла успешно

jnz @@OK

; Если ошибка

jmp @@Fail

@@OK:

; Сохраняем HINSTANCE

; Инициализируем приложение

jnz @@InitOK

@@Fail:

; Если инициализация завершилась неудачно

int 21h

@@InitOK:

; Выводим на экран диалоговое окно

call MESSAGEBOX, 0, ds offset lpszText, ds offset lpszTitle, MB_OK+MB_ICONEXCLAMATION

; выход

int 21h


 

Разработка простых приложений для Windows практически не отличается от программирования для Dos. Однако есть особенности, которые мы сейчас рассмотрим.

Система Windows и ее функции используют алгоритм «прямой» передачи параметров через стек, как в языке Pascal. Поэтому мы и вводим этот модификатор в директиву modal.

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

extrn MESSAGEBOX:proc

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

freespace db 16 dup(0)

Для приложений Win16 эти 16 байт являются обязательным условием нормальной работы программы. При загрузке Вашего приложения Windows заменяет эти 16 байт своей информацией. Для более подробного разъяснения этой проблеммы обратитесь к книге Мэта Патрика (Matt Patrick) «Внутри Windows» («Windows Internals»), 1993, Addison Wesley.

Известно, что каждое приложение для Windows начинается с WinMain. Через параметры, переданные этой функции, можно получить командную строку и идентификатор предыдущего экземпляра программы. Немного сложнее процедура инициализации приложения происходит в Assembler.

Первым шагом в инициализации приложения под Windows будем считать вызов функции INITTASK. После выполнения эта функция возвращает ряд параметров.

При успешном завершении AX=1.

DX содержит nCmdShow, то есть параметр, указывающий на стиль просмотра окна.

ES:BX содержит адрес командной строки.

SI содержит идентификатор ранее загруженной программы hPrevInstance.

DI содержит идентификатор загруженной программы hInstance.

После обработки входных параметров нужно инициализировать приложение, используя функцию INITAPP. Единственным параметром этой функции служит идентификатор приложения hInstance. Функция INITAPP возвращает в AX=1, если приложение успешно проинициализировано.

Для того, чтобы посмотреть, что же эта программа умеет делать, вы должны создать еще один файл .def.

Файл hello.def




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 656; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.