Реферат по предмету "Информатика, программирование"


График функции по Assembler’у

Министерство Образования РФ
Южно-Уральский Государственный Университет
Приборостроительный факультет
Кафедра Автоматики и Управления
Курсовая работа по Assembler’у.
Выполнил: Копылов Е.Е.
Группа: ПС-116
Проверила: Вставская Е.В.
Челябинск 2008 год

Задание.
Нарисоватьграфик X=3sint+sin5t;Y=2cos3t+sint

Описаниерешения задачи.
Подключаетсяфайл win.inc,к котором хранятся некоторые константы, используемые в программе. В сегментеданных объявляются переменные: декриптор окна консоли, дескриптор совместимогоокна консоли, дескриптор приложения, название окна консоли, дескрипторконтекста окна, ширина, высота, x,y, t,cons, deg_rad=180,offsetX, offsetY(смещения начала отсчета графика относительно осей Оxи Oy),scaleX,scaleY (масштаб по Xи Y).
Всегменте кода вызывается функция GetModuleHandle,при помощи которой получаем дескриптор приложения, после чего помещаем его в eax.Далее заполняем структуру окна стиль. Подключаем процедуру обработки сообщений.Загружаем иконку и курсор с помощью вызова функций LoadIconи LoadCursor. Задаем цвет фона окнас помощью функции CreateSolidBrush.Регестрируем класс окна с помощью функции RegisterClass.Далее создаем окно зарегестрированного класса с помощью функции CreateWindowEx.Сравниваем eax с нулем. Если он равен0, то переходим на метку END_LOOP.Помещаем дескриптор окна в регистр eax.Отображаем созданное окно с помощью функции ShowWindowи перерисовываем видимую часть окна при помощи UpdateWindow.Далее следует цикл обработки сообщений, после которого вызывается функция ExitProcess.
Послеглавной функции следует процедура окна. Полученное сообщение сравнивается ссообщениями WM_DESTROY,WM_CREATE,WM_SIZE,WM_PAINT.В случае соответствия следует переход на соответствующую метку.
WMSIZE: Дескрипторсовместимого окна консоли сравнивается с 0 и если не равен, то переходим наметку WMCREATE. В противномслучае удаляем контекст окна.
WMCREATE: Передаем дескрипторокна и помещаем его в eax.Создаем совместимый контекст окна с помощью функции CreateCompatibleDCи помещаем дескриптор совместимого контекста в регистр eax.Получаем размер окна при его изменении с помощью функции GetWindowRect.Находим высоту и ширину данного размера окна. Создаем карту бит для данногоконтекста окна с помощью функции CreateCompatibleBitmap. Выбираем объект спомощью функции SelectObject.Задаем цвет фона, а также рисуем прямоугольник с помощью выбранной кисти.Задаем цвет пера при помощи функции CreatePen.Помещаем дескриптор пера в регистр eaxи выбираем объект. Помещаем в offsetYмаксимальную высоту, видимую на экране. Аналогичные действия проделываем и сосью Ох. Рисуем горизонтальную и вертикульную оси координат. Создаем перо ивыбираем цвет.
Помещаемв ScaleX и ScaleYзначения (width-16)/4 и (height-54)/2.Это необходимо для более пропорционального расположения графика в окне. Помещаемв ecx 360, на метке Lзагружаем ecx в стек. Помещаем в cons5. Загружаем последовательно в стек tи PI. Перемножаем их и делим на deg_rad,в которой хранится значение 180. Загружаем в стек consиперемножаем st(0) и st(1).Вычисляем синус. Это sin(5t).Подобные операции проделываем, чтобы получить 3sint.Затем складываем 3sint и sin(5t).Умножаем результат на ScaleXи прибавляем к offsetX.Заносим в стек 2 и умножаем на вычисленное cos(3t),добавляем sint. Умножаем это на ScaleYи прибавляем к offsetY.Уыеличиваем t на единицу. Проводимлинию для данных значений Xи Y. Выгружаем ecxиз стека и сравниваем его с 0. Если равно, то идем на метку М. В противномслучае уменьщаем ecx на единицу ипереходим снова на метку L.На метке М передаем полученные данные в виртуальное окно и даем командуперерисовки. Задаем цвет фона и букв с помощью функции SetBkColor.Помещаем в eaxmess_len.Выводим текст названия функции на экран. Обнуляем eax.Переходим на метку FINISH.
WMPAINT: Перерисовываем окно спомощью функции BeginPaint.Помещаем дескриптор окна в eax.Копируем содержимое виртуального окна в реальное. Заканчиваем перерисовку окнас помощью функции EndPaint.Обнуляем eax. Переходим на метку FINISH.
WMDESTROY: Удаляем контекстыокна. При получении сообщения WM_QUITвызываем функцию PostQuitMessage.Обнуляем eax. Переходим на метку FINISH.
DEFWNDPROC: Вызываем обработчиксообщений по умолчанию.
FINISH: Передаем управлениевызывающей функции, завершаем данную функцию.

Текст программы.
.586
.modelflat,stdcall
RGBW   equ 00D4D0C8h    ; цвет фонавокне
includewin.inc
.data
         hwnd    dd 0
   hinst      dd 0
         TITL           db«Курсовой_Копылов_ПС-116»,0
         CLASSNAME    db 'CLASS32',0
   Message           MSG
   wc         WNDCLASS 
        
         hdc                       dd0 
         hPen           dd0
         memdc                 dd0 
         Height_                dd?
         Width_                dd?
         rect_           RECT
         ps                        PAINTSTRUCT 
        
         messX                  db     'X=3sint+sin5tY=2*cos3t +sint',0
         mess_len   equ $-messX-1
        
         OffsetX                DD?
         OffsetY                DD?
         ScaleX                 DD?
         ScaleY                 DD?
         X                         DD0
         Y                         DD0
         t                           DD0
         cons            DD?
         deg_rad                DD180
.code
startproc
         invoke GetModuleHandle,0
   mov     hinst,eax
   mov wc.style,CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS
   mov wc.lpfnWndProc,offset WNDPROC
   
   mov eax,hinst
         movwc.hInstance,eax
         invoke        LoadIcon,0,IDI_APPLICATION
   mov                 wc.hIcon,eax
   
         invoke        LoadCursor,0,IDC_ARROW
         mov            wc.hCursor,eax
        
         invoke CreateSolidBrush,RGBW
         mov            wc.hbrBackground,eax
   
   mov                 wc.lpszMenuName,0
   mov                 wc.lpszClassName,offset CLASSNAME
         invoke        RegisterClass,offset wc
         invokeCreateWindowEx,0,
                   offsetCLASSNAME,
                   offset TITL,
                  WS_CAPTION+WS_SYSMENU+WS_THICKFRAME+WS_GROUP+WS_TABSTOP,
                   100,100,
                   400,450,
                   0,0,HINST,0
    cmp eax,0
    jz  END_LOOP
       
    mov hwnd,eax
    invoke ShowWindow,hwnd,SW_SHOWNORMAL
         invokeUpdateWindow,hwnd
MSG_LOOP:
         invokeGetMessage,offset Message,0,0,0
        
   cmp eax,0
   je  END_LOOP
   
         invokeTranslateMessage,offset Message
         invokeDispatchMessageA,offset Message
   jmp MSG_LOOP
   
END_LOOP:
         invokeExitProcess,Message.wParam
        
startendp
WNDPROC proc hW:DWORD,Mes:DWORD,wParam:DWORD,lParam:DWORD
         cmpMes, WM_DESTROY
         je WMDESTROY
             
         cmpMes, WM_CREATE     
         je WMCREATE
             
         cmpMes, WM_PAINT
         je WMPAINT
             
         cmpMes,WM_SIZE    
         je WMSIZE
         jmpDEFWNDPROC
WMSIZE:
         cmpmemdc,0
         jneWMCREATE
        
         invokeDeleteDC,memdc
        
WMCREATE:
         invokeGetDC,hW
         movhdc,eax
        
         invokeCreateCompatibleDC,hdc
         movmemdc,eax
        
         invokeGetWindowRect,hW,offset rect_
        
         moveax,rect_.bottom
         subeax,rect_.top
         movHeight_, eax
        
         moveax, rect_.right
         subeax, rect_.left
         movWidth_, eax
         invokeCreateCompatibleBitmap,hdc,Width_,Height_
         invokeSelectObject,memdc,eax
        
         invokeCreateSolidBrush,RGBW
         invokeSelectObject,memdc,eax
        
         invokePatBlt,memdc,0,0,Width_,Height_,PATCOPY
         invokeReleaseDC,hW,hdc
         invokeCreatePen,PS_SOLID,2,0
         movhPen,eax
         invokeSelectObject,memdc,hPen
        
         moveax,Height_
         subeax,27
         shreax,1   
         movOffsetY,eax
        
         moveax,Width_
         subeax,10
         shreax,1
         movOffsetX,eax
        
         invokeMoveToEx,memdc,0,OffsetY,0
         invokeLineTo,memdc,Width_,OffsetY
         ;;;;;;;;;;;;;;;;;;
         invokeMoveToEx,memdc,OffsetX,0,0
         invokeLineTo,memdc,OffsetX,Height_
        
         invokeCreatePen,PS_SOLID,2,00000000h
         movhPen,eax
         invokeSelectObject,memdc,hPen
        
         mov            eax,0
         mov            t,eax
         mov            eax,27
         mov            cons,eax
         fild    Width_
         fisub  cons
         mov            eax,10
         mov            cons,eax
         fidiv  cons
         fstp   ScaleX
         mov            eax,27
         mov            cons,eax
         fild    Height_
         fisub  cons
         mov            eax,10
         mov            cons,eax
         fidiv  cons
         fstp   ScaleY
mov            cons,5
         fild    t
         fldpi
         fmulp
         fidiv  deg_rad
         fild    cons
         fmulp
         fsin                     
                             ;MyX=3sint+sin5t
         fildt
         fldpi
         fmulp
        
         fidivdeg_rad
         fsin
         mov            cons,3
         fild    cons
         fmulp
        
         fadd
         fchs
         fmul  ScaleX
         fiadd OffsetX
         fistp  X
        
         movcons,3  
         fild    t
         fldpi
         fmulp
         fidiv  deg_rad
         fild    cons
         fmulp
         fcos
         movcons,2         
fild    cons
fmulp
        
         fildt ;sint OK
         fldpi          ;MyX=2cos3t +sint
         fmulp
         fidivdeg_rad
         fsin
         fadd
        
         fmul  ScaleY
         fiadd OffsetY     
         fistp  Y
invokeMoveToEx,memdc,x,y,0
         movecx, 360
L:      pushecx
         mov            cons,5
         fild    t
         fldpi
         fmulp
         fidiv  deg_rad
         fild    cons
         fmulp
         fsin                     
                             ;MyX=3sint+sin5t
         fildt
         fldpi
         fmulp
        
         fidivdeg_rad
         fsin
         mov            cons,3
         fild    cons
         fmulp
        
         fadd
         fchs
         fmul  ScaleX
         fiadd OffsetX
         fistp  X
        
         movcons,3  
         fild    t
         fldpi
         fmulp
         fidiv  deg_rad
         fild    cons
         fmulp
         fcos
         movcons,2         
fild    cons
fmulp
        
         fildt ;sint OK
         fldpi          ;MyX=2 *cos3t +sint
         fmulp
         fidivdeg_rad
         fsin
         fadd
        
         fmul  ScaleY
         fiadd OffsetY     
         fistp  Y
        
         inct
        
         invokeLineTo,memdc,X,Y
         popecx
         cmpecx,0
         jeM
         dececx
         jmpL
M:
         invokeInvalidateRect,hW,offset rect_,0
         invokeSetBkColor,memdc,RGBW
        
         moveax, mess_len
         INVOKETextOutA, memdc, 10, 20,
         offsetmessX, eax; вывод текстаX=3cost+cos5t Y=log2(e)*cos3t +sint
   MOVEAX, 0
   JMP FINISH
WMPAINT:
         invokeBeginPaint,hW,offset ps
         mov  hdc,eax
        
         invokeBitBlt,hdc,0,0,Width_,Height_,memdc,0,0,SRCCOPY
         invokeEndPaint,hdc,offset ps
        
         moveax,0
   jmp FINISH
WMDESTROY:
         invokeDeleteDC,hPen
         invokeDeleteDC,memdc
         invokePostQuitMessage, 0
   mov eax, 0
   jmp FINISH
DEFWNDPROC:
         invokeDefWindowProc,hW,Mes,wParam,lParam     
       
FINISH:
         ret
         WNDPROCendp
        
endSTART

ПроцедураWNDProc
/>
Главнаяфункция.
/>
Полученныйграфик полностью совпадает с тем, что получен в программе GraphCalc.Следовательно, моя программа работает верно.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.