Библиотека knigago >> Литература по изданиям >> Самиздат, сетевая литература >> Assembler & Win32


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 1099, книга: Монология
автор: Антон В. Шутов

Книга "Монология" Антона Шутова - это погружение в глубины человеческой души, наполненное психологическим реализмом и философскими размышлениями. Главный герой, Павел, человек, разочаровавшийся в жизни и потерявший цель. Он укрывается в своем собственном мире, где единственным его спутником становится голос, нашептывающий ему мысли и сомнения. Этот голос - олицетворение его подсознания, которое беспощадно раскрывает перед ним его страхи, слабости и внутренние противоречия. Сквозь...

Александр Усов - Assembler & Win32

Assembler & Win32
Книга - Assembler & Win32.  Александр Усов  - прочитать полностью в библиотеке КнигаГо
Название:
Assembler & Win32
Александр Усов

Жанр:

Самиздат, сетевая литература, Литература ХX века (эпоха Социальных революций), Assembler, Windows API

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

-

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Assembler & Win32"

В статье вкратце рассматриваются вопросы создания Win32-приложений на языке Ассемблер. Приведены конкретные примеры.

Читаем онлайн "Assembler & Win32". [Страница - 5]

jz     exit

       call   TranslateMessage,   offset msg

       call   DispatchMessageA,   offset msg

       jmp    msg_loop

exit:  call   ExitProcess,        0


public stdcall      WndProc

proc   WndProc      stdcall

arg    @@hwnd:      dword, @@msg: dword, @@wPar:      dword, @@lPar:      dword

       mov    eax,[@@msg]

       cmp    eax,WM_COMMAND

       je     @@command

       cmp    eax,WM_DESTROY

       jne    @@default

       call   PostQuitMessage,    0

       xor    eax,eax

       jmp    @@ret

@@default:

       call   DefWindowProcA,     [@@hwnd], [@@msg], [@@wPar], [@@lPar]

@@ret: ret

@@command:

       mov    eax,[@@wPar]

       cmp    eax,ID_OPEN

       je     @@open

       cmp    eax,ID_SAVE

       je     @@save

       call   SendMessageA,       [@@hwnd], WM_CLOSE, 0, 0

       xor    eax,eax

       jmp    @@ret

@@open:      mov    eax, offset msg_open_txt

       mov    edx, offset msg_open_tlt

       jmp    @@mess

@@save:      mov    eax, offset msg_save_txt

       mov    edx, offset msg_save_tlt

@@mess:      call   MessageBoxA,        0, eax, edx, MB_OK

       xor    eax,eax

       jmp    @@ret

endp   WndProc

end    Start

Комментарии к программе

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

Существо данной программы заключается в демонстрации вариантов работы с оконным меню. Программу можно откомпилировать в трёх вариантах (версиях), указывая компилятору ключи VER2 или VER3 (по умолчанию используется ключ VER1). В первом варианте программы меню определяется на уровне класса окна и все окна данного класса будут иметь аналогичное меню. Во втором варианте, меню определяется при создании окна, как параметр функции CreateWindowEx. Класс окна не имеет меню и в данном случае, каждое окно этого класса может иметь своё собственное меню. Наконец, в третьем варианте, меню загружается после создания окна. Данный вариант показывает, как можно связать меню с уже созданным окном.

Директивы условной компиляции позволяют включить все варианты в текст одной и той же программы. Подобная техника удобна не только для демонстрации, но и для отладки. Например, когда Вам требуется включить в программу новый фрагмент кода, то Вы можете применить данную технику, дабы не потерять функционирующий модуль. Ну, и конечно, применение директив условной компиляции – наиболее удобное средство тестирования различных решений (алгоритмов) на одном модуле.

Представляет определённый интерес использование стековых фреймов и заполнение структур в стеке посредством регистра указателя стека (esp). Именно это продемонстрировано при заполнении структуры WndClassEx. Выделение места в стеке (фрейма) делается простым перемещением esp:

       sub    esp,SIZE WndClassEx

Теперь мы можем обращаться к выделенной памяти используя всё тот же регистр указатель стека. При создании 16-битных приложений такой возможностью мы не обладали. Данный приём можно использовать внутри любой процедуры или даже произвольном месте программы. Накладные расходы на подобное выделение памяти минимальны, однако, следует учитывать, что размер стека ограничен и размещать большие объёмы данных в стеке вряд ли целесообразно. Для этих целей лучше использовать “кучи” (heap) или виртуальную память (virtual memory).

Остальная часть программы достаточно тривиальна и не требует каких-либо пояснений. Возможно более интересным покажется тема использования макроопределений.

Макроопределения

Мне достаточно редко приходилось серьёзно заниматься разработкой макроопределений при программировании под DOS. В Win32 ситуация принципиально иная. Здесь грамотно написанные макроопределения способны не только облегчить чтение и восприятие программ, но и реально облегчить жизнь программистов. Дело в том, что в Win32 фрагменты кода часто повторяются, имея при этом не принципиальные отличия. Наиболее показательна, в этом смысле, оконная и/или диалоговая процедура. И в том и другом случае мы определяем вид сообщения и передаём управление тому участку кода, который отвечает --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.