РефератыИнформатика, программированиеСоСоздание программы с использованием программного продукта Turbo Assembler

Создание программы с использованием программного продукта Turbo Assembler

Содержание


Введение


Исследование WinAPI функций


Заключение


Библиографический список


Приложения


Введение

Целью данного курсового проекта является углубление и закрепление знаний, полученных по дисциплине "Системное программное обеспечение", формирование опыта создания программ с использованием программного продукта Turbo Assembler.


Главным же преимуществом языка ассемблера, в отличие от языков типа Pascal или C, является то, что искусный программист, как правило, способен написать более эффективную программу на ассемблере, чем те, что генерируются трансляторами с языков программирования высокого уровня. Т.е. для программ на ассемблере характерно использование меньшего количества команд и обращений в память, что позволяет увеличить скорость и уменьшить размер программы.


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


Исследование WinAPI функций

Функция LoadIcon


Загpужает поименованный pесуpс пиктогpаммы.


В случае успешного завеpшения - идентификатоp пиктогpаммы; 0 - в пpотивном случае.


Функция LoadCursor


Загpужает поименованный pесуpс куpсоpа.


В случае успешного завеpшения - идентификатоp куpсоpа; 0 - если куpсоp не найден; не опpеделено, если pесуpс не является pесуpсом куpсоpа.


Функция RegisterClassEx


Регистpиpует класс окна, атpибуты котоpого опpеделены паpаметpом WndClassEx, для последующего использования. Класс окна может pегистpиpоваться только один pаз.


Функция ShowWindow


Отобpажает или пpячет окно обpазом, указанным паpаметpом CmdShow.


Функция GetMessage


Считывает сообщение, в pамках диапазона фильтpации, из очеpеди сообщений пpикладной задачи. Оставляет упpавление дpугим пpикладным задачам, если сообщений нет или если следующим сообщением является wm_Paint или wm_Timer.


Функция DefWindowProc


Обеспечивает стандаpтную обpаботку сообщений для сообщений, которые явно не обpабатываются пpикладной задачей.


Возвpащаемое значение: результат обpаботки сообщения.


Заключение

В ходе выполнения данной курсовой работы были получены практические навыки по программированию в Win32 API. Была реализована программа на низкоуровневом языке Ассемблер в EXE-формате с использованием программного продукта Turbo Assembler, удовлетворяющая требованиям задания: данная программа осуществляет вывод сообщения от клавиатуры в свое окно.


Библиографический список

1. Методические указания к лабораторному практикуму /В.П. Кулюкин. Екатеринбург: изд. ИПК УГТУ, 2004. - 40с.


2. Лабораторный практикум по дисциплине "Системное программное обеспечение" / Уфимск. гос. авиац. техн. ун-т. Сост.: О.Д. Лянцев. - Уфа, 2008. - 57 с.


3. Калашников О.А. Ассемблер? Это просто! Учимся программировать. СПб.: БХВ-Петербург, 2006. - 384 с.: ил.


4. Абель П. Ассемблер. Язык и программирование для IBM PC / Пер. с англ. - К.: Век+, М.: ЭНТРОП, 2005. - 736 с.


Приложения

Приложение А - Исходный текст программы


.586


. model flat, stdcall


extern GetModuleHandleA: near


extern LoadIconA: near


extern LoadCursorA: near


extern RegisterClassA: near


extern CreateWindowExA: near


extern GetMessageA: near


extern ShowWindow: near


extern UpdateWindow: near


extern TranslateMessage: near


extern DispatchMessageA: near


extern ExitProcess: near


extern DefWindowProcA: near


extern PostQuitMessage: near


extern BeginPaint: near


extern EndPaint: near


extern TextOutA: near


extern SetBkColor: near


extern InvalidateRect: near


includelib user32. lib


includelib kernel32. lib


includelib gdi32. lib


/>

include windows. inc


style equ CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS


_Data segment


hWnd dd 0


msg MSG <? >


wc WNDCLASS <? >


pnt PAINTSTRUCT <? >


hInst dd 0


TitleName db 'Программа 1',0


ClassName db 'Class32',0


char WPARAM 20h


clear db ' ',0


hdc dd 0


_Data ends


_Code segment


Start:


push 0


call GetModuleHandleA


mov [hInst],eax


mov [wc. style],style


mov [wc. lpfnWndProc],offset WndProc


mov [wc. cbClsExtra],0


mov [wc. cbWndExtra],0


mov eax, [hInst]


mov [wc. hInstance],eax


push IDI_APPLICATION


push 0


call LoadIconA


mov [wc. hIcon],eax


push IDC_CROSS


push 0


call LoadCursorA


mov [wc. hCursor],eax


mov [wc. hbrBackground],0


mov dword ptr [wc. lpszMenuName],0


mov dword ptr [wc. lpszClassName],offset ClassName


push offset wc


call RegisterClassA


push 0


push [hInst]


push 0


push 0


push 400


push 400


push 100


push 100


push WS_OVERLAPPEDWINDOW


push offset TitleName


push offset ClassName


push 0


call CreateWindowExA


cmp eax,0


jz _err


mov [hWnd],eax


push SW_SHOWNORMAL


push [hWnd]


call ShowWindow


push [hWnd]


call UpdateWindow


msg_loop:


push 0


push 0


push 0


push offset msg


call GetMessageA


cmp eax,0


je end_loop


push offset msg


call TranslateMessage


push offset msg


call DispatchMessageA


jmp msg_loop


end_loop:


push [msg. wParam]


call ExitProcess


_err:


jmp end_loop


WndProc proc


push ebp


mov ebp,esp


push ebx


push esi


push edi


cmp dword ptr [ebp+0ch],WM_DESTROY


je wmdestroy


cmp dword ptr [ebp+0ch],WM_CREATE


je wmcreate


cmp dword ptr [ebp+0ch],WM_PAINT


je wmpaint


cmp dword ptr [ebp+0ch],WM_CHAR


je wmchar


jmp defwndproc


wmchar:


push dword ptr [ebp+10h]


pop char


push TRUE


push NULL


push dword ptr [ebp+08h]


call InvalidateRect


wmpaint:


push offset pnt


push dword ptr [ebp+08h]


call BeginPaint


mov hdc,eax


push 5


push offset clear


push 100


push 100


push hdc


call TextOutA


push 1


push offset char


push 100


push 100


push hdc


call TextOutA


push offset pnt


push eax


call EndPaint


mov eax,0


jmp finish


wmcreate:


mov eax,0


jmp finish


defwndproc:


push dword ptr [ebp+14h]


push dword ptr [ebp+10h]


push dword ptr [ebp+0ch]


push dword ptr [ebp+08h]


call DefWindowProcA


jmp finish


wmdestroy:


push 0


call PostQuitMessage


mov eax,0


finish:


pop edi


pop esi


pop ebx


pop ebp


ret 16


WndProc endp


lenstr proc


push ebp


mov ebp,esp


push esi


mov esi,dword ptr [ebp+8]


xor ebx,ebx


lbl1:


cmp byte ptr [esi],0


jz lbl2


inc ebx


inc esi


jmp lbl1


lbl2:


pop esi


pop ebp


ret 4


lenstr endp


_Code ends


end Start

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Создание программы с использованием программного продукта Turbo Assembler

Слов:850
Символов:8973
Размер:17.53 Кб.