Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


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

Тип Реферат
Предмет Информатика и программирование
Просмотров
607
Размер файла
67 б
Поделиться

Ознакомительный фрагмент работы:

График функции по 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

.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. Следовательно, моя программа работает верно.


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156492
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
64 096 оценок star star star star star
среднее 4.9 из 5
им. С.Ю.Витте
Работа выполнена досрочно, содержание по существу, маленький недочет был исправлен. Спасибо!
star star star star star
БПТ
Обращался к Елене Александровне второй раз Всё очень здорово и оперативно сделанно, без за...
star star star star star
"КрасГАУ"
Заказываю в первый раз у Евгения , и остался максимально доволен , всё чётко !)
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Решение задач по предмету «Математика»

Решение задач, Математика

Срок сдачи к 29 дек.

1 минуту назад

Отчет с выполнением заданий

Решение задач, Отчет, бух учет

Срок сдачи к 25 дек.

4 минуты назад

Расчет параметров участка электроэнергетической системы

Решение задач, Электрические системы, электроника, электротехника

Срок сдачи к 8 янв.

4 минуты назад
4 минуты назад

Сделать курсач по методике

Курсовая, Электротехника

Срок сдачи к 26 дек.

5 минут назад

Психология безопасности труда

Реферат, Русский язык и культура речи

Срок сдачи к 29 дек.

7 минут назад

Сделать реферат и презентацию

Презентация, Биомеханика

Срок сдачи к 25 дек.

7 минут назад

написать курсовую работу по уголовному праву

Курсовая, Уголовное право

Срок сдачи к 25 дек.

7 минут назад

Начертить 12 чертежей

Чертеж, Начертательная геометрия

Срок сдачи к 9 янв.

8 минут назад

Феномен успеха и успешность в профессиональном развитии

Реферат, Психология

Срок сдачи к 28 дек.

9 минут назад

В файле прикреплен пример выполнения задания

Контрольная, Криминология

Срок сдачи к 27 дек.

9 минут назад

9-11 страниц. правовые основы военной реформы в ссср в 20-е гг

Реферат, История государства и права России

Срок сдачи к 26 дек.

10 минут назад

Выполнить реферат. История Англии. Е-01554

Реферат, Английский язык

Срок сдачи к 26 дек.

10 минут назад

Составить Проект массового взрыва

Контрольная, Взрывное дело, горное дело

Срок сдачи к 8 янв.

12 минут назад

Термодинамика

Решение задач, Термодинамика

Срок сдачи к 26 дек.

12 минут назад

Нужен реферат, объем 15-20 страниц

Реферат, Безопасность в техносфере

Срок сдачи к 5 янв.

12 минут назад

Выполнить реферат. История Англии. Е-01554

Реферат, История

Срок сдачи к 26 дек.

12 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно