Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Топ:
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Интересное:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
2020-04-01 | 90 |
5.00
из
|
Заказать работу |
|
|
Windows-приложение на ассемблере содержит один сегмент данных.data и один сегмент кода.code. В программе использовано 20 функций API. Параметры этим функциям передаются через стек, результат возвращается в регистре ЕАХ.
Директива mode1 задает плоскую модель памяти (flat) и стиль передачи параметров при входе в процедуры программы и выходе из них (stdcall). Модель памяти flat обозначает плоскую модель памяти. В соответствии с плоской моделью памяти компилятор создает программу, которая содержит 32-битовый сегмент для данных и кода программы. Указание этой модели памяти заставляет компоновщик создать исполняемый файл с расширением.exe.
Параметр stdcall определяет порядок передачи параметров через стек справа налево.
Директива include включае в программу файл win32.inc.
Функции Win32 API, используемые в программе должны быть объявлены с помощью директивы extrn для того, чтобы компилятор мог сгенерировать правильный код.
При создании окна приложения с помощью CreateMenu получаем дескриптор меню и используем его в качестве одного из параметров функций CreateWindowExA. Затем с помощью функции CreatePopupMenu получаем дескриптор выпадающего меню и вызовом AppendMenu определяем все пункты наших меню.
Результат работы программы приведен на Рис.1.
Текст программы
1. p386 ; эта директива разрешает транслятору обрабатывать команды
; процессора i386
2. jumps ; транслятор автоматически преобразует команду
;условной
; передачи управления в комбинацию условной и безусловной
; команд если условная команда в силу ограниченности
; области своего действия;не обеспечивает передачу
|
; управления по нужному адресу
3. model flat, STDCALL; выбирается модель памяти для 32- разрядного
; программирования и правила передачи
; параметров функциям STDCALL, далее
; действующие по умолчанию
4. include win32.inc; файл описания структур и констант
5. L equ <LARGE>; последовательности символов LARGE,
; являющейся именем операции, объявляющей
; следующий за ней операнд 32-разрядным,
; присваивается имя L
6. IDM_QUIT equ 100
7. IDM_ABOUT equ 101
8. MF_ENABLED equ 0
9. MF_POPUP equ 10h
10. MF_OWNERDRAW equ 100h
;Функции Win32 API, используемые программой
Extrn BeginPaint :PROC
Extrn CreateWindowExA:PROC
Extrn DefWindowProcA:PROC
Extrn DispatchMessageA:PROC
Extrn EndPaint :PROC
Extrn ExitProcess :PROC
Extrn GetMessageA :PROC
Extrn GetModuleHandleA:PROC
Extrn LoadCursorA :PROC
Extrn LoadIconA :PROC
Extrn RegisterClassA :PROC
Extrn PostQuitMessage :PROC
Extrn ShowWindow :PROC
Extrn TranslateMessage:PROC
Extrn UpdateWindow :PROC
Extrn CreateMenu :PROC
Extrn MessageBoxA :PROC
Extrn AppendMenuA :PROC
Extrn DrawMenuBar :PROC
Extrn CreatePopupMenu:PROC
31..data ; переопределенное имя, означающее начало сегмента
; данных
Newhwnd dd 0
33. lppaint PAINTSTRUCT <?>
34. msg MSGSTRUCT <?>
35. wc WNDCLASS <?>
HInst dd 0
Fl dw 0
SzTitleName db ' Это наше окно ',0
SzClassName db 'ASMCLASS32',0
40. szHello db 'Привет!',0
SzAppName db 'Сообщение',0
|
HMenu dd 0
Hsubmenu dd 0
Item1 db ' Меню ',0
Item2 db ' Выход ',0
Item3 db 'Возврат',0
47. .code ; переопределенное имя, означающее начало
; сегмента кода
48. start:
Push L 0
Call GetModuleHandleA
51. mov [hInst], eax
;инициализация структуры WndClass
52. mov [wc.clsStyle], CS_HREDRAW + CS_VREDRAW +
CS_GLOBALCLASS
53. mov [wc.clsLpfnWndProc], offset WndProc
54. mov [wc.clsCbClsExtra], 0
55. mov [wc.clsCbWndExtra], 0
56. mov eax, [hInst]
57. mov [wc.clsHInstance], eax
58. push L IDI_APPLICATION
Push L 0
Call LoadIconA
61. mov [wc.clsHIcon], eax
62. push L IDC_ARROW
Push L 0
Call LoadCursorA
65. mov [wc.clsHCursor], eax
66. mov [wc.clsHbrBackground], COLOR_WINDOW + 1
67. mov dword ptr [wc.clsLpszMenuName],0
68. mov dword ptr [wc.clsLpszClassName], offset szClassName
Push offset wc
Call RegisterClassA
Call CreateMenu
72. mov [hMenu],eax
Push L 0 ; lpParam
74. push [hInst] ; hInstance
75. push [hMenu] ; menu
Push L 0 ; parent hwnd
77. push L CW_USEDEFAULT ; height
78. push L CW_USEDEFAULT ; width
79. push L CW_USEDEFAULT ; y
80. push L CW_USEDEFAULT ; x
81. push L WS_OVERLAPPEDWINDOW; Style
Push offset szTitleName ; Title string
Push offset szClassName ; Class name
Push L 0 ; extra style
Call CreateWindowExA
86. mov [newhwnd], eax
Call CreatePopupMenu
88. mov [hsubmenu], eax
Push offset item2
90. push L IDM_QUIT
Push 0
Push eax
Call AppendMenuA
Push offset item3
95. push L IDM_ABOUT
Push 0
97. push [hsubmenu];eax
Call AppendMenuA
Push offset item1
100. push [hsubmenu]
101. push MF_POPUP
102. push [hMenu]
Call AppendMenuA
Nop
105. push L SW_SHOWNORMAL
106. push [newhwnd]
Call ShowWindow
108. push [newhwnd]
Call UpdateWindow
110. push [newhwnd]
Call DrawMenuBar
112. msg_loop:
Push L 0
Push L 0
Push L 0
Push offset msg
Call GetMessageA
Cmp ax, 0
119. je end_loop
Push offset msg
Call TranslateMessage
Push offset msg
Call DispatchMessageA
124. jmp msg_loop
125. end_loop:
126. push [msg.msWPARAM]
Call ExitProcess
128.;---- Оконная процедура ----
129. WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD,\
Wparam:DWORD, lparam:DWORD
LOCAL hDC:DWORD
132. cmp [wmsg], WM_DESTROY
Je wmdestroy
134. cmp [wmsg], WM_SIZE
Je wmsize
136. cmp [wmsg], WM_CREATE
Je wmcreate
138. cmp [wmsg],WM_PAINT
Je wmpaint
140.;**************************************
141. cmp [wmsg],WM_COMMAND
Je wmcommand
143.;**************************************
Jmp defwndproc
145. wmcommand:
|
Mov eax,lparam
Cmp ax,0
Jne m1
Mov eax,wparam
150. cmp ax,IDM_ABOUT
Jne m2
152. call MessageBoxA,0,offset szHello,offset szAppName,MB_OK
Jmp m1
154. m2: cmp ax,IDM_QUIT
Jne m1
Push 0
Call PostQuitMessage
M1: mov eax,0
Jmp finish
160. wmcreate:
Mov eax, 0
Jmp finish
163. defwndproc:
164. push [lparam]
165. push [wparam]
166. push [wmsg]
167. push [hwnd]
Call DefWindowProcA
Jmp finish
170. wmdestroy:
Push L 0
Call PostQuitMessage
Mov eax, 0
Jmp finish
175. wmsize:
Mov eax, 0
Jmp finish
178. wmpaint:
Push offset lppaint
180. push [hwnd]
Call BeginPaint
182. mov [hDC],eax
Push offset lppaint
184. push [hwnd]
Call EndPaint
Mov eax,0
Jmp finish
188. finish:
Ret
WndProc endp
191.;---------------------------------
Public WndProc
193. end start ; конец программы
рис1. Окно программы
Заключение
Моя задача состояла в создании программы без файла описания ресурсов с помощью функций CreateMenu и CreatePopupMenu. Это приложение не выполняет никакой полезной работы и служит для демонстрации некоторых возможностей системы в организации интерфейса пользователя.
Библиографический список
1. Зубков С.В. Assembler. Для DOS Windows и Unix. М.: ДМК, 1999
2. Пустоваров В.И. АССЕМБЛЕР. Программирование и анализ корректности машинных программ.
3. Применение TURBO ASSEMBLER для программирования ПЭВМ. Часть1,2.: Методические указания к лабораторному практикуму по дисциплине: «Системное программное обеспечение» / Составитель В.П.Кулюкин. Екатеринбург: изд. ИПК УГТУ, 2000.
|
|
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!