Вывод результата работы
Пояснительная записка к курсовому проекту По дисциплине: Программирование и основы алгоритмизации Вариант № 1
Проверил: доцент кафедры Вставская Е.В. “____”_____________2007г Выполнил: студент группы ПС-164 Лысенко Д.Г. “____”_____________2007г
Челябинск 2007 г. Содержание:
1. Постановка задачи. 3 2. Метод решения. 3 3. Текст программы.. 4 4. Схема алгоритма. 12 5. Вывод результата работы.. 14 6. Проверка правильности программы............................................ 14
Постановка задачи Даны целые числа a , b и n . Вычислить . Метод решения
Подключаем файл windowA.inc, в котором будут содержаться базовые структуры и константы Win32. Затем в процедуре start первоначально вызываем функции Win32 API, после чего происходит регистрация окна (определения класса окна и регистрация его в системе). Затем создаем и отображаем, собственно, само окно. Потом запускается цикл обработки сообщения, которые будут посылаться ОС программе и обрабатываться в отдельной процедуре WindowProc и затем собственно выход из программы. В процедуре обработке сообщений, если нажата клавиша «Вычислить», то считывается значение из поля редактирования, преобразовывается в числовой формат, производятся нужные вычисления и выводится на экран Текст программы
STYLBTN equ 40000000h + 10000000h ;WSCHILD+WS_VISIBLE STYLEDT equ 40000000h + 10000000h + 800000h + 10000h ;Пример каркасного приложения для Win32 .486 locals .model flat,STDCALL include windowA.inc includelib imp32i.lib
extrn GetModuleHandleA:PROC ;дескриптор класса окна extrn LoadIconA:PROC ;дескриптор пиктограммы extrn LoadCursorA:PROC ;дескриптор курсора extrn GetStockObject:PROC ;дескриптор кисти extrn RegisterClassExA:PROC ;регистрация класса окна extrn CreateWindowExA:PROC ;создание экземпляра окна extrn ShowWindow:PROC ;отображение окна extrn UpdateWindow:PROC ;перерисовка окна
extrn GetMessageA:PROC ;получение сообщения extrn TranslateMessage:PROC ;обнаружение сообщения extrn DispatchMessageA:PROC ;передача сообщения ;оконной функции extrn ExitProcess:PROC ;завершение процедуры
extrn BeginPaint:PROC ;начало перерисовки extrn EndPaint:PROC ;конец перерисовки extrn TextOutA:PROC ;вывод текста extrn PostQuitMessage:PROC extrn DefWindowProcA:PROC ;обработчик по умолчанию
extrn MessageBoxA:PROC extrn SendMessageA:PROC extrn GetDC:PROC extrn ReleaseDC:PROC ;оконной функции
public WindowProc .data hwnd dd 0 ; дескриптор экземпляра окна hInst dd 0 ; дескриптор класса окна hdc dd 0 ; hedt1 dd 0 ;дескриптор поля редактирования hbtn dd 0 ;дескриптор кнопки hh1 dd 0 hh2 dd 0 hh3 dd 0 hh4 dd 0 hbtn1 dd 0 hbtn2 dd 0 CPBUT db '&Посчитать',0 CPBUT2 db 'В&ыход',0 CLSBTN db 'BUTTON',0 CPEDT db '',0 CLSEDT db 'EDIT',0
TEXT db ' ' TEXTA db ' ' TEXTB db 'результат: '
TEXTLEN = $-TEXT ten dw 10 temp dw 0 a dd ? b dd ? n dd ?
wcl WNDCLASSEX <?> ;структура для регистрации класса ; окна message MSG <?> ;структура для регистрации сообщений
szClassName db 'Приложение Win32',0 szTitleName db 'Курсач Лысенко Д. ПС-164',0 MesWindow db 'Введите a,b и n,'
MesWindowLen = $-MesWindow
ps PAINTSTRUCT <?>
.code start proc near ;Получение дескриптора класса окна push 0; call GetModuleHandleA mov hInst,eax
WinMain: ;для начала инициализируем поля структуры WndClassEx mov wcl.cbSize,type WNDCLASSEX mov wcl.style, CS_HREDRAW+CS_VREDRAW ;полная перерисовка mov wcl.lpfnWndProc,offset WindowProc mov wcl.cbClsExtra,0 mov wcl.cbWndExtra,0 mov eax,hInst mov wcl.hInstance,eax
push IDI_APPLICATION ;стандартное приложение 32512 push 0 call LoadIconA mov wcl.hIcon,eax
push IDC_ARROW ;стандартный курсор стрелка 32512 push 0 call LoadCursorA mov wcl.hCursor,eax
;определим цвет фона окна push LTGRAY_BRUSH ;1 call GetStockObject mov eax,5 mov wcl.hbrBackground,eax
mov dword ptr wcl.lpszMenuName,0 ;без главного меню mov dword ptr wcl.lpszClassName,offset szClassName ;имя класса окна mov wcl.hIconSm,0
;регистрируем класс окна push offset wcl call RegisterClassExA
;создаем окно: push 0 ;lpParam push hInst ;hInstance push 0 ;menu push 0 ;parent hwnd push 200 ;высота окна push 300 ;ширина окна push 300 ;координата y л.в. угла окна push 300 ;координата x л.в. угла push WS_OVERLAPPEDWINDOW ;стиль окна push offset szTitleName ;Строка заголовка окна push offset szClassName ;имя класса окна push 0 ;дополнительные стили call CreateWindowExA mov hwnd,eax ;hwnd - дескриптор окна
;показать окно: push SW_SHOWNORMAL ;1 push hwnd call ShowWindow
;перерисовываем содержимое окна push hwnd call UpdateWindow
;запускаем цикл сообщений:
cycl_msg: push 0 push 0 push NULL push offset message call GetMessageA cmp ax,0 je end_cycl_msg
;трансляция ввода с клавиатуры push offset message call TranslateMessage ;передача сообщения оконной функции push offset message call DispatchMessageA jmp cycl_msg end_cycl_msg:
;выход из приложения push NULL call ExitProcess start endp
;Оконная функция WindowProc для обработки сообщений WindowProc proc arg @@hwnd:DWORD, @@mes:DWORD, @@wparam:DWORD, @@lparam:DWORD uses ebx,edi, esi ; регистры должны сохраняться local @@hdc:DWORD cmp @@mes,WM_DESTROY je wmdestroy cmp @@mes,WM_CREATE je wmcreate cmp @@mes,WM_PAINT je wmpaint cmp @@mes, WM_COMMAND je wmcommand jmp default
wmcreate: ;создание окна mov eax,0
;;;;поле1
push 0 push hInst push 0 push @@hwnd push 20 push 35 push 50 push 10 push STYLEDT push offset CPEDT push offset CLSEDT push 0 call CreateWindowExA mov hh1,eax mov eax,0 ;;; поле2
push 0 push hInst push 0 push @@hwnd push 20 push 35 push 50 push 50 push STYLEDT push offset CPEDT push offset CLSEDT push 0 call CreateWindowExA mov hh2,eax mov eax,0
;;;;;;3
push 0 push hInst push 0 push @@hwnd push 20 push 35 push 50 push 90 push STYLEDT push offset CPEDT push offset CLSEDT push 0 call CreateWindowExA mov hh3,eax mov eax,0
;;;;;
push 0 push hInst push 0 push @@hwnd push 20 push 80 push 80 push 10 push STYLBTN ;STYLBTN push offset CPBUT push offset CLSBTN push 0 call CreateWindowExA mov hbtn,eax mov eax,0
push 0 push hInst push 0 push @@hwnd push 20 push 80 push 80 push 100 push STYLBTN ;STYLBTN push offset CPBUT2 push offset CLSBTN push 0 call CreateWindowExA mov hbtn2,eax mov eax,0
;возвращаемое значение 0 jmp exit_wndproc wmcommand: mov eax, hbtn cmp @@lparam,eax je calc mov eax, hbtn2 cmp @@lparam,eax je res
wmnodestroy: mov eax,0 jmp exit_wndproc
res:
jmp wmdestroy
wmpaint: push offset ps push @@hwnd call BeginPaint mov @@hdc,eax
push MesWindowLen push offset MesWindow push 20 push 10 push @@hdc call TextOutA
;освободить контекст push offset ps push @@hdc call EndPaint mov eax,0 ;возвращаемое значение 0 jmp exit_wndproc
wmdestroy: ;послать сообщение WM_QUIT push 0 call PostQuitMessage mov eax,0 ;возвращаемое значение 0 jmp exit_wndproc
default: ;обработка по умолчанию push @@lparam push @@wparam push @@mes push @@hwnd call DefWindowProcA jmp exit_wndproc
calc:
;считываем поле 1 push offset TEXTA push 150 push WM_GETTEXT push hh1 call SendMessageA
push offset TEXTA call StringToDig mov a,eax
;поле 2 push offset TEXTA push 150 push WM_GETTEXT push hh2 call SendMessageA
push offset TEXTA call StringToDig mov b,eax
;поле 3 push offset TEXTA push 150 push WM_GETTEXT push hh3 call SendMessageA
push offset TEXTA call StringToDig mov n,eax
mov ecx,n mov eax,1d repeat: imul a loop repeat imul b
aam or ax,3030h mov [TEXTB+12],ah mov [TEXTB+13],al
push @@hwnd call GetDC mov @@hdc,eax
push 18 push offset TEXTB push 120 push 10 push @@hdc call TextOutA
exit_wndproc:
ret WindowProc endp
StringToDig proc near ARG @@TEXT:DWORD mov esi,@@TEXT mov eax,0 mov edx,0 mov dl,[esi] cmp dl,'-' jne N mov temp,1 inc esi mov dl,[esi]
N: cmp dl,'0'
jl MRET cmp dl,'9' jg MRET
and dl,0Fh ; ASCII->BCD add eax,edx mul ten inc esi mov dl,[esi]
cmp dl,'0' jl MDIV cmp dl,'9' jg MDIV
; mul ten and dl,0Fh add eax,edx jmp MRET
MDIV: div ten MRET: cmp temp,1 jne n1 imul eax,-1 mov temp,0
n1: ret StringToDig endp
end start Схема алгоритма Вывод результата работы
Популярное: Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Почему стероиды повышают давление?: Основных причин три... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (211)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |