Банк рефератов содержит более 364 тысяч рефератов, курсовых и дипломных работ, шпаргалок и докладов по различным дисциплинам: истории, психологии, экономике, менеджменту, философии, праву, экологии. А также изложения, сочинения по литературе, отчеты по практике, топики по английскому.
Полнотекстовый поиск
Всего работ:
364150
Теги названий
Разделы
Авиация и космонавтика (304)
Административное право (123)
Арбитражный процесс (23)
Архитектура (113)
Астрология (4)
Астрономия (4814)
Банковское дело (5227)
Безопасность жизнедеятельности (2616)
Биографии (3423)
Биология (4214)
Биология и химия (1518)
Биржевое дело (68)
Ботаника и сельское хоз-во (2836)
Бухгалтерский учет и аудит (8269)
Валютные отношения (50)
Ветеринария (50)
Военная кафедра (762)
ГДЗ (2)
География (5275)
Геодезия (30)
Геология (1222)
Геополитика (43)
Государство и право (20403)
Гражданское право и процесс (465)
Делопроизводство (19)
Деньги и кредит (108)
ЕГЭ (173)
Естествознание (96)
Журналистика (899)
ЗНО (54)
Зоология (34)
Издательское дело и полиграфия (476)
Инвестиции (106)
Иностранный язык (62792)
Информатика (3562)
Информатика, программирование (6444)
Исторические личности (2165)
История (21320)
История техники (766)
Кибернетика (64)
Коммуникации и связь (3145)
Компьютерные науки (60)
Косметология (17)
Краеведение и этнография (588)
Краткое содержание произведений (1000)
Криминалистика (106)
Криминология (48)
Криптология (3)
Кулинария (1167)
Культура и искусство (8485)
Культурология (537)
Литература : зарубежная (2044)
Литература и русский язык (11657)
Логика (532)
Логистика (21)
Маркетинг (7985)
Математика (3721)
Медицина, здоровье (10549)
Медицинские науки (88)
Международное публичное право (58)
Международное частное право (36)
Международные отношения (2257)
Менеджмент (12491)
Металлургия (91)
Москвоведение (797)
Музыка (1338)
Муниципальное право (24)
Налоги, налогообложение (214)
Наука и техника (1141)
Начертательная геометрия (3)
Оккультизм и уфология (8)
Остальные рефераты (21697)
Педагогика (7850)
Политология (3801)
Право (682)
Право, юриспруденция (2881)
Предпринимательство (475)
Прикладные науки (1)
Промышленность, производство (7100)
Психология (8694)
психология, педагогика (4121)
Радиоэлектроника (443)
Реклама (952)
Религия и мифология (2967)
Риторика (23)
Сексология (748)
Социология (4876)
Статистика (95)
Страхование (107)
Строительные науки (7)
Строительство (2004)
Схемотехника (15)
Таможенная система (663)
Теория государства и права (240)
Теория организации (39)
Теплотехника (25)
Технология (624)
Товароведение (16)
Транспорт (2652)
Трудовое право (136)
Туризм (90)
Уголовное право и процесс (406)
Управление (95)
Управленческие науки (24)
Физика (3463)
Физкультура и спорт (4482)
Философия (7216)
Финансовые науки (4592)
Финансы (5386)
Фотография (3)
Химия (2244)
Хозяйственное право (23)
Цифровые устройства (29)
Экологическое право (35)
Экология (4517)
Экономика (20645)
Экономико-математическое моделирование (666)
Экономическая география (119)
Экономическая теория (2573)
Этика (889)
Юриспруденция (288)
Языковедение (148)
Языкознание, филология (1140)

Лабораторная работа: График функции по Assembler’у

Название: График функции по Assembler’у
Раздел: Рефераты по информатике, программированию
Тип: лабораторная работа Добавлен 12:53:50 07 октября 2008 Похожие работы
Просмотров: 29 Комментариев: 2 Оценило: 0 человек Средний балл: 0 Оценка: неизвестно     Скачать

Министерство Образования РФ

Южно-Уральский Государственный Университет

Приборостроительный факультет

Кафедра Автоматики и Управления

Курсовая работа по 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

.model flat,stdcall

RGBW equ 00D4D0C8h ; цветфонавокне

include win.inc

.data

hwnd dd 0

hinst dd 0

TITL db "Курсовой_Копылов_ПС-116",0

CLASSNAME db 'CLASS32',0

Message MSG <?>

wc WNDCLASS <?>

hdc dd 0

hPen dd 0

memdc dd 0

Height_ dd ?

Width_ dd ?

rect_ RECT <>

ps PAINTSTRUCT <?>

messX db 'X=3sint+sin5t Y=2*cos3t +sint',0

mess_len equ $-messX-1

OffsetX DD ?

OffsetY DD ?

ScaleX DD ?

ScaleY DD ?

X DD 0

Y DD 0

t DD 0

cons DD ?

deg_rad DD 180

.code

start proc

invoke GetModuleHandle,0

mov hinst,eax

mov wc.style,CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS

mov wc.lpfnWndProc,offset WNDPROC

mov eax,hinst

mov wc.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

invoke CreateWindowEx,0,

offset CLASSNAME,

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

invoke UpdateWindow,hwnd

MSG_LOOP:

invoke GetMessage,offset Message,0,0,0

cmp eax,0

je END_LOOP

invoke TranslateMessage,offset Message

invoke DispatchMessageA,offset Message

jmp MSG_LOOP

END_LOOP:

invoke ExitProcess,Message.wParam

start endp

WNDPROC proc hW:DWORD,Mes:DWORD,wParam:DWORD,lParam:DWORD

cmp Mes, WM_DESTROY

je WMDESTROY

cmp Mes, WM_CREATE

je WMCREATE

cmp Mes, WM_PAINT

je WMPAINT

cmp Mes,WM_SIZE

je WMSIZE

jmp DEFWNDPROC

WMSIZE:

cmp memdc,0

jne WMCREATE

invoke DeleteDC,memdc

WMCREATE:

invoke GetDC,hW

mov hdc,eax

invoke CreateCompatibleDC,hdc

mov memdc,eax

invoke GetWindowRect,hW,offset rect_

mov eax,rect_.bottom

sub eax,rect_.top

mov Height_, eax

mov eax, rect_.right

sub eax, rect_.left

mov Width_, eax

invoke CreateCompatibleBitmap,hdc,Width_,Height_

invoke SelectObject,memdc,eax

invoke CreateSolidBrush,RGBW

invoke SelectObject,memdc,eax

invoke PatBlt,memdc,0,0,Width_,Height_,PATCOPY

invoke ReleaseDC,hW,hdc

invoke CreatePen,PS_SOLID,2,0

mov hPen,eax

invoke SelectObject,memdc,hPen

mov eax,Height_

sub eax,27

shr eax,1

mov OffsetY,eax

mov eax,Width_

sub eax,10

shr eax,1

mov OffsetX,eax

invoke MoveToEx,memdc,0,OffsetY,0

invoke LineTo,memdc,Width_,OffsetY

;;;;;;;;;;;;;;;;;;

invoke MoveToEx,memdc,OffsetX,0,0

invoke LineTo,memdc,OffsetX,Height_

invoke CreatePen,PS_SOLID,2,00000000h

mov hPen,eax

invoke SelectObject,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

fild t

fldpi

fmulp

fidiv deg_rad

fsin

mov cons,3

fild cons

fmulp

fadd

fchs

fmul ScaleX

fiadd OffsetX

fistp X

mov cons,3

fild t

fldpi

fmulp

fidiv deg_rad

fild cons

fmulp

fcos

mov cons,2

fild cons

fmulp

fild t ;sint OK

fldpi ;MyX=2cos3t +sint

fmulp

fidiv deg_rad

fsin

fadd

fmul ScaleY

fiadd OffsetY

fistp Y

invoke MoveToEx,memdc,x,y,0

mov ecx, 360

L: push ecx

mov cons,5

fild t

fldpi

fmulp

fidiv deg_rad

fild cons

fmulp

fsin

;MyX=3sint+sin5t

fild t

fldpi

fmulp

fidiv deg_rad

fsin

mov cons,3

fild cons

fmulp

fadd

fchs

fmul ScaleX

fiadd OffsetX

fistp X

mov cons,3

fild t

fldpi

fmulp

fidiv deg_rad

fild cons

fmulp

fcos

mov cons,2

fild cons

fmulp

fild t ;sint OK

fldpi ;MyX=2 *cos3t +sint

fmulp

fidiv deg_rad

fsin

fadd

fmul ScaleY

fiadd OffsetY

fistp Y

inc t

invoke LineTo,memdc,X,Y

pop ecx

cmp ecx,0

je M

dec ecx

jmp L

M:

invoke InvalidateRect,hW,offset rect_,0

invoke SetBkColor,memdc,RGBW

mov eax, mess_len

INVOKE TextOutA, memdc, 10, 20,

offset messX, eax ; выводтекста X=3cost+cos5t Y=log2(e)*cos3t +sint

MOV EAX, 0

JMP FINISH

WMPAINT:

invoke BeginPaint,hW,offset ps

mov hdc,eax

invoke BitBlt,hdc,0,0,Width_,Height_,memdc,0,0,SRCCOPY

invoke EndPaint,hdc,offset ps

mov eax,0

jmp FINISH

WMDESTROY:

invoke DeleteDC,hPen

invoke DeleteDC,memdc

invoke PostQuitMessage, 0

mov eax, 0

jmp FINISH

DEFWNDPROC:

invoke DefWindowProc,hW,Mes,wParam,lParam

FINISH:

ret

WNDPROC endp

end START


Процедура WNDProc

Главная функция.

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

Оценить/Добавить комментарий
Имя
Оценка
Комментарии:
Где скачать еще рефератов? Здесь: letsdoit777.blogspot.com
Евгений06:47:06 19 марта 2016
Кто еще хочет зарабатывать от 9000 рублей в день "Чистых Денег"? Узнайте как: business1777.blogspot.com ! Cпециально для студентов!
19:52:52 28 ноября 2015

Работы, похожие на Лабораторная работа: График функции по Assembler’у

Назад
Меню
Главная
Рефераты
Благодарности
Опрос
Станете ли вы заказывать работу за деньги, если не найдете ее в Интернете?

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



Результаты(150556)
Комментарии (1836)
Copyright © 2005-2016 BestReferat.ru bestreferat@mail.ru       реклама на сайте

Рейтинг@Mail.ru