Автор работы: Пользователь скрыл имя, 17 Мая 2013 в 20:47, курсовая работа
Постепенно ситуация менялась. Появились более удобные средства общения с компьютером. Но в отличии от других языков ассемблер не умирал, более того он немог этого сделать в принципе.
Если коротко, то ассемблер- это символическое представление машинного языка. Все процессы в машине на самом низком, аппаратном уровне приводятся в действие только командами машинногшо языка.
ВВЕДЕНИЕ 3
ОСНОВНАЯ ЧАСТЬ 4
ЗАКЛЮЧЕНИЕ 17
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 18
Министерство образования Российской Федерации
Институт переподготовки кадров
Уральского государственного технического университета
Кафедра микропроцессорной техники
Руководитель
Студент гр.СП-923
г.Нягань
2001г.
СОДЕРЖАНИЕ
Введение.
Ассемблер- один из самых старых из существующих сегодня языков программирования.Когда-то это был самый основной язык, без которого нельзя было заставить компьютер сделать что-либо полезное.
Постепенно ситуация менялась. Появились более удобные средства общения с компьютером. Но в отличии от других языков ассемблер не умирал, более того он немог этого сделать в принципе.
Если коротко, то ассемблер-
это символическое представлени
Отсюда понятно, что несмотря на общее название, язык Ассемблера для каждого типа компьютера свой. Это касается и внешнего вида программ, написанных на Ассемблере, и идей, отражением которых этот язык является.
Описание программы.
Windows-приложение на
ассемблере содержит один
Регистр mode1 задает модуль сегментации (flat) и стиль генерации кода при входе в процедуры программы и выходе из них (stdcall). Модель памяти flat обозначает плоскую модель памяти. В соответствии с этой моделью компилятор создает программу, которая содержит 32-битовый сегмент для данных и кода программы. Указание этой модели памяти заставляет компоновщик создать исполняемый файл с расширением .exe. Параметр stdcall определяет порядок передачи параметров через стек справа налево.
Директива include включае в программу файл win32.inc.
Функции Win32 API, используемые в программе должны быть объявлены с помощью директивы extrn для того, чтобы компилятор мог сгенерировать правильный код.
Строки 35-68 содержат описание сегмента данных, в котором определяются переменные и экземпляры структур, используемые в программе. Для запуска приложения под управлением Windows необходимо выполнить ряд шагов, содержание которых заключается в вызове ряда функций Win32.API:
* Выполнение стартового кода;
* Выполнение главной
функции, которая выполняет
* Организация обработки сообщений в оконной процедуре.
Оконная процедура определяет то, что выводится в рабочую область окна, и то, как окну реагировать на пользовательский ввод.Создание окна выполняется функцией Win32 API CreateWindowEx. Для этого ей нужно передать множество параметров. Для создания окна необходимы 2 шага: сначала определение класса окна, а лишь затем непосредственно его создание.
После выполнения функции CreateWindowExA создается окно, но это пока произойдет только лишь внутри самой Windows, - на экране это новое окно пока еще не отобразится. Для того чтобы созданное окно появилось на экране, применяем функцию ShowWindowA. В качестве параметров этой функции передается дескриптор hWnd окна, которое необходимо отобразить на экране, и константа, задающая начальный вид окна.
Приложение может иметь несколько оконных функций. Их количество определяется количеством классов окон, зарегестрированных в системе функцией Register Class(Ex).
Windows требует, чтобы оконная функция сохраняла значения регистров ebi, edi и esi ,т.к. оконная функция должна быть рекурсивной.По завершении работы оконная функция формирует значения в регистре EAX. Если сообщение обрабатывалось в оконной функции, то в eax необходимо поместить нулевое значение.
Полосы прокрутки - этоэлементы управления, предназначенные для регулирования вертикального и горизонтального положения на экране ассоциированных с ними объектов. Разница между полосами прокрутки, являющимися частью окна и полосами прокрутки - дочерними окнами, состоит в том, что дочерние окна имеют встроенный клавиатурный интерфейс, позволяющий воздействовать на полосу прокрутки с помощью клавиатуры. Сообщение SB_LINEUP генерируется обеими полосами при щелчке на верхней или левой стрелке, а сообщение SB_LINEDOWN - в случае нажатия нижней или правой стрелки. Чтобы полоса прокрутки функционировала корректно необходимо определить для нее диапозон прокрутки и задать позицию бегунка.
Встроенная полоса прокрутки, к сожалению, досталась только управлению с помощью курсора мыши. По умолчанию для полос прокрутки, являющимися частью окна, этот диапозон(число шагов мужду крайними позициями бегунка) определен от 0 до 100. Для того, чтобы изменить диапозон прокрутки необходимо вызвать функцию SetScrollRange
В Windows не смотря на то, что операции ввода осуществляемые приложением, ограничены рабочей областью его окна, программа должна быть готова обновить информацию в этой области по требованию системы.
В программе использован ряд функций Windows API, которые как бы являются основными, когда речь идет об оконных процедурах (CreateWindow, ShowWindow и др.).
Рассмотрим подробнее
процедуры, которые
Краткое описание процедур:
InvalidateRect - эта функция
добавляет прямоугольник к
Параметры:
hWnd определяет окно, чья область изменилась, если этот параметр равен 0, то Windows изменяет все окна и посылает оконной процедуре сообщение *WM_ERASEBKGND and WM_NCPAINT*;
lpRect указатель на
структуру RECT, которая содержит
координаты клиентского
BErase определяет должен
ли быть стерт фон в пределах
области модификации. Если
GetClientRect - отыскивает координаты области клиента окна. Клиентские координаты определяют координаты верхнего левого и правого нижнего углов. Координаты верхнего левого угла равны (0,0).
Параметры:
hWnd : определяет окно,
координаты которого надо
lpRect: указатель на структуру, которая получит кооридинаты.
При правильном завершении функции возвращается значение, отличное от 0.
SetScrollRange - функция устанавливает
минимальное и максимальное
Параметры :
hWnd : определяет, что это стандартное окно с полосой прокрутки или просто полоса прокрутки, в зависимости от значения параметра nBar.
nBar: определяет полосу
прокрутки. Этот параметр
ScrollWindow - функция, которая прокручивает содержание области клиента указанного окна.
hWnd : определяет дескриптор окна, где клиентская область должна быть прокручена.
XAmount: определяет состав
модуля для горизонтальной
YAmount: определяет состав модуля для вертикальной прокрутки.
lpRect: указатель на структуру RECT , определяющую часть области клиента для прокрутки. Если этот параметр равен 0, то прокручивается вся клиентская область
lpClipRect: указатель на структуру RECT , содержащую координаты прямоугольника отсечения.
Если функция выполнилась правильно, то она возвращает значение, отличное от ноля.
SetScrollPos - функция, которая устанавливает позицию бегунка в указанной полосе прокрутки и изменяет эту позицию.
Параметры:
hWnd : идентифицирует полосу прокрутк
nBar: определяет полосу прокрутки.
Этот параметр может принимать одно из следующих значений:
- SB_CTL - устанавливает позицию бегунка в управлении полосы прокрутки, hWnd - дискриптор полосы прокрутки.
- SB_GORS - устанавливает позицию бегунка в стандартной горизонтальной полосе прокрутки.
- SB_VERT - устанавливает позицию бегунка в стандартной вертикальной полосе прокрутки.
nPos: параметр, определяющий новую позицию бегунка. Она должна быть в пределах прокручиваемого диапазона.
bRedraw: параметр, определяющий
оттянута ли повторно полоса
прокрутки, для того чтобы
Если функция неправильно завершена, то возвращается ноль.
; обрабатывать команды процессора i486
2. jumps ; транслятор автоматически преобразует
; команду условной
передачи управления в
; условной и безусловной команд, если условная команда в
; cилу ограниченности области своего действия не
; обеспечивает передачу
3. model flat,STDCALL ; выбирается модель памяти для 32-
; разрядного программирования и правила
;передачи параметров функциям STDCALL,
; далее действующие по умолчанию
4. include win32.inc ; файл, содержащий описания структур
; данных и констант
5. L equ <LARGE> ; последовательности символов LARGE,
; являющейся именем операции,
; объявляющей следующий за ней операнд ; 32-разрядным, присваивается имя L
6. extrn ginPaint:PROC ; описание импортируемых из
;Windows функций
7. extrn CreateWindowExA:PROC
8. extrn DefWindowProcA:PROC
9. extrn DispatchMessageA:PROC
10. extrn EndPaint:PROC
11. extrn ExitProcess:PROC
12. extrn GetMessageA:PROC
13. extrn GetModuleHandleA:PROC
14. extrn LoadCursorA:PROC
15. extrn LoadIconA:PROC
16. extrn PostQuitMessage:PROC
17. extrn RegisterClassA:PROC
18. extrn ShowWindow:PROC
19. extrn TextOutA:PROC
20. extrn UpdateWindow:PROC
21. extrn GetTextMetricsA:PROC
22. extrn SetCurrentDirectoryA:PROC
23. extrn FindFirstFileA:PROC
24. extrn FindNextFileA:PROC
25. extrn FindClose:PROC
26. extrn SetScrollPos:PROC
27. extrn InvalidateRect:PROC
28. extrn GetClientRect:PROC
29. extrn ScrollWindow:PROC
30. extrn GetDC:PROC
31. extrn ReleaseDC:PROC
32. extrn SetScrollRange:PROC
33. extrn TranslateMessage:PROC
34. .data ;предопределенное имя,
;означающее начало сегмента данных
35. hFindFile dd 0
36. newhwnd dd 0
37. wc WNDCLASS <?>
38. qq1 db '@@@@'
39. lppaint PAINTSTRUCT <?>
40. qq2 db '@@@@'
41. msg MSGSTRUCT <?>
42. tm TEXTMETRIC <?>
43. rc RECT <?>
44. charht dd 0
45. hInst dd 0
46. fl dw 0
47. szTitleName db 'Это курсовой',0
48. szClassName db 'ASMCLASS32',0
49. Buffer db 'Помни о порядке передачи параметров функции!',0
50. buf_v db 260 dup (0)
51. num dd 0
52. ;##########################
53. lpPathName dd 0
54. szP db 0
55. w32fd WIN32_FIND_DATA <?>
56. lpFileName dd 0
57. fn db "*.*",0
58. ;##########################
59. nVertDifference dd 0
60. nVertPosition dd 0
61. cyStep dd 0
62. nFirst dd 0
63. nLast dd 0
64. cyMax dd 0
65. cyPos dd 0
66. cory dd 5
67. count dd 0
68. py dd 0
Информация о работе Вывод на экран текущий каталог в графическом режиме (со скролингом)