Автор работы: Пользователь скрыл имя, 17 Мая 2013 в 20:47, курсовая работа
Постепенно ситуация менялась. Появились более удобные средства общения с компьютером. Но в отличии от других языков ассемблер не умирал, более того он немог этого сделать в принципе.
Если коротко, то ассемблер- это символическое представление машинного языка. Все процессы в машине на самом низком, аппаратном уровне приводятся в действие только командами машинногшо языка.
ВВЕДЕНИЕ 3
ОСНОВНАЯ ЧАСТЬ 4
ЗАКЛЮЧЕНИЕ 17
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 18
69. .code ;предопределенное имя, означающее
;начало сегмента кода
70. start:
71. push L 0
72. call GetModuleHandleA ;
;указывающий, куда был отображен в адресном
; пространстве процесса EXE- или DLL файла
73. mov [hInst], eax ; результат выполнения функции сохраняется в качестве переменной hInst
74. reg_class:
75. ;*****************************
;инициализация структуры WNDCLASS
76. mov [wc.clsStyle], CS_HREDRAW + CS_VREDRAW ; стиль класса
77. mov [wc.clsLpfnWndProc], offset WndProc ;адрес оконной процедуры
78. mov wc.clsCbClsExtra], 0 ;определяет дополнительное число
; байтов для структуры класса окна,
; которые система резервирует
;в служебной памяти для всех окон
; этого класса
79. mov [wc.clsCbWndExtra], 0 ; задает в байтах объем памяти,
; резервируемой системой в конце
; каждой такой структуры
; данного класса
80. mov eax, [hInst]
81. mov [wc.clsHInstance], eax ; содержит базовый адрес данного
;EXE- файла, полученный с помощью
;функции GetModuleHandle
82. call LoadIconA, 0, IDI_APPLICATION ; заданная по умолчанию
; пиктограмма
83. mov [wc.clsHIcon], eax
84. call LoadCursorA, 0 ,IDC_ARROW ; стандартная стрелка курсора
85. mov [wc.clsHCursor], eax
86. mov [wc.clsHbrBackground],
87. mov dword ptr [wc.clsLpszMenuName], 0
88. mov dword ptr [wc.clsLpszClassName], offset szClassName
89. call RegisterClassA, offset wc ; регистрирует класс окна,
; атрибуты которого определены ;в структуре WNDCLASS
90. call CreateWindowExA, 0,offset szClassName,offset szTitleName, \
; создает окно, имеющее указанный тип
; и принадлежащее указанному классу
91. WS_OVERLAPPEDWINDOW OR WS_VSCROLL,CW_USEDEFAULT, \
92. CW_USEDEFAULT,CW_USEDEFAULT,
93. [hInst], 0
94. mov [newhwnd], eax
95. call ShowWindow, [newhwnd], SW_SHOWNORMAL ; показывает каким
; образом должно быть
; показано окно
96. call UpdateWindow, [newhwnd] ; обновляет изображение
; окна, посылая
;сообщение WM_PAINT
; оконной процедуре, если
; область модификации
; окна не пуста
97. msg_loop:
98. call GetMessageA, offset msg, 0, 0, 0 ;считывает сообщение
; очереди сообщений
; прикладной задачи
99..if eax!= 0
100. call DispatchMessageA, offset msg ; передает сообщение
; оконной процедуре
101. call TranslateMessage, offset msg
102. jmp msg_loop
103. ; .endif
104. call ExitProcess, [msg.msWPARAM] ;
105. ;*****************************
106. ;Оконная процедура
107. ;*****************************
108. WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD,\
109. wparam:DWORD, lparam:DWORD
110. LOCAL hDC:DWORD
111. cmp [wmsg], WM_DESTROY ; посылается оконной процедуре сразу
; же после закрытия окна
112. je wmdestroy
113. cmp [wmsg], WM_SIZE ; посылается оконной процедуре после того,
; как изменился размер окна
114. je wmsize
115. cmp [wmsg], WM_CREATE ; передача оконной процедуре нового
; окна после того, как окно создано,
; но прежде чем окно стало видимым
116. je wmcreate
117. cmp [wmsg],WM_PAINT ; обеспечивают перерисовку окна, когда
; часть или вся рабочая область окна
; становится недействительной
118. je wmpaint
119. cmp [wmsg],WM_VSCROLL ;
120. je wmscroll
121. jmp defwndproc
122. wmcreate:
123. call GetDC,[hwnd] ;дескриптор контекстного устройства
124. mov [hDC],eax
125. call GetTextMetricsA,[hDC],offset tm
126. mov ebx,0
127. mov bx,[tm.tmExtLeading] ; межстрочное расстояние
128. add bx,[tm.tmHeight] ;высота (добавка к координате строки)
129. mov [charht],ebx
130. call ReleaseDC,[hwnd],[hDC] ; отказ от контекстного устройства
131. mov eax, 0
132. jmp finish
133. defwndproc:
134. call DefWindowProcA,[hwnd],[wmsg],[
135. jmp finish
136. wmscroll:
137. call GetClientRect,[hwnd],
; области окна
138. movzx eax,[word ptr wparam] ;преобразование содержимого wparam в
; двойное слово
139. cmp eax,SB_LINEDOWN ; щелчок мыши на стрелке вниз,
; приводит к прокрутке на одну строку
; вниз
140. je sblinedown
141. cmp eax,SB_LINEUP ; щелчок мыши на стрелке вверх,
; приводит к прокрутке на одну строку
; вверх
142. je sblineup
143. cmp eax,SB_ENDSCROLL ;
; отпущена клавиша мыши после
; удерживания ее на полосе прокрутки
144. je bp3
145. sblinedown:
146. mov [cyStep],1 ; прибавить шаг
147. jmp endvscroll_1
148. sblineup:
149. mov [cyStep],-1
150. jmp endvscroll
151. endvscroll:
152. cmp [cyPos],0
153. je bp3
154. endvscroll_1: mov eax,[cyPos] ;посылаем позицию бегунка в
; регистр
155. add eax,[cyStep]
156. mov [cyPos],eax
157. mov eax,0
158. sbb eax,[charht] ;расчет межстрочного расстояния
159. mov ecx,[cyStep]
160. mov edx,0
161. mul ecx
162. mov ecx,eax
163. call ScrollWindow,[hwnd],0,
; где клиентская область должна
; быть прокручена
164. call InvalidateRect,[hwnd],
; изменившейся
; областью
165. call SetScrollPos,[hwnd],SB_VERT,[
;позиции бегунка в
; стандартной
;вертикальной
;полосе прокрутки
166. call UpdateWindow,[hwnd] ;
; если область не пуста
167. bp3: mov eax,0
168. jmp finish
169. wmdestroy:
170. call PostQuitMessage,0
171. mov eax, 0
172. jmp finish
173. wmsize: ;для перерисовки нового размера окна
;значение старшего слова означает высоту
; клиентской части
174. mov eax,[lparam]
175. mov cl,16
176. rcr eax,cl
177. and eax,0ffffh
178. mov dx,0
179. mov cx,word ptr [charht]
180. div cx
181. movzx ecx,ax
182. mov eax,101
183. sbb eax,ecx
184. cmp eax,0
185. ja www1
186. mov eax,0
187. www1: mov [cyMax],ecx
188. call FindFirstFileA,offset fn,offset w32fd
189. mov [hFindFile],eax
190. mov esi,1
191. s_m4:
192. call FindNextFileA,[hFindFile]
193. cmp eax,0
194. je s_m5
195. inc esi
196. jmp s_m4
197. s_m5: mov [nLast],esi
198. mov eax,[cyMax]
199. cmp eax,[cyPos]
200. ja www2
201. mov [cyPos],eax
202. www2: push FALSE
203. push esi
204. push L 0
205. push SB_VERT
206. push [hwnd]
207. call SetScrollRange
208. push TRUE
209. push [cyPos]
210. push SB_VERT
211. push [hwnd]
212. call SetScrollPos
213. mov eax, 0
214. jmp finish
215. wmpaint:
216. call BeginPaint,[hwnd],offset lppaint ;получили контекст
; устройства
217. mov [hDC],eax
218. mov eax,[cyPos] ; начальная позиция бегунка
219. mov ecx,[charht] ;получили координату вывода в пикселях
220. mov dx,0
221. mul cx
222. movzx ecx,ax
223. mov [cory],5 ; занесли по у -5
224. mov ecx,1 ; занесли по x -1
225. call FindFirstFileA,offset fn,offset w32fd ;отыскиваем
;первый
; файл
226. mov [hFindFile],eax
227. cmp ecx,[cyPos]
228. jne qqq1
229. mov esi,0
230. m3: mov dl,w32fd.cFileName[
231. cmp dl,0
232. je m2
233. mov buf_v[esi],dl
234. inc esi
235. jmp m3
236. cmp [cyPos],0 ; если не ноль, то переход на метку
; qqql
237. jne qqq1
238. m2:
239. mov [num],esi
240. call TextOutA,[hDC],5,[cory],
;первого
;найденного
; файла
241. qqq1: mov ebx,1
242. m6:
243. call FindNextFileA,[hFindFile]
244. cmp eax,0 ; проверка для
; последнего файла
245. je kon
246. mov esi,0
247. mov edi,0
248. m4: mov dl,w32fd.cFileName[
;файла
249. cmp dl,0
250. je m5
251. mov buf_v[esi],dl
252. inc edi
253. inc esi
254. jmp m4
255. m5: cmp ebx,[cyPos]
256. jb qqq2
257. mov eax,[charht]
258. add [cory],eax
259. call TextOutA,[hDC],5,[cory],
;новой строки
260. qqq2: inc ebx ;счетчик строк
261. jmp m6
262. kon: call EndPaint,[hwnd],offset lppaint ;отдали
;контекст
; устройства и
;перешли в цикл
;обработки сообщений
263. mov eax,0
264. jmp finish
265. finish:
266. ret
267. WndProc endp
268. public WndProc
269. end start ; конец программы.
Заключение.
Моя задача состояла в создании учебной программы, демонстрирующей вывод на экран в графическом режиме заданный каталог со скролингом. С полосами прокрутки связан единственный недостаток, который заключается в том, что приложениями невозможно управлять без мыши. Но так как большинство приложений Windows поддерживают работу с мышью, это вряд ли стоит считать серьезным недостатком. Необходимо было выполнить целый ряд действий, прежде чем приложение смогло адекватно реагировать на сообщения, посылаемые полосами прокрутки.
Библиографический список.
Информация о работе Вывод на экран текущий каталог в графическом режиме (со скролингом)