Введение:
Люди используют графики уже долгое время. Например, графики серьёзно упрощают жизнь в случае представления результатов статистических исследований, благодаря графикам можно увидеть даже малейшее изменение состояния объекта рассмотрения. Однако, проблема в том, что вручную графики в некоторых случаях очень неудобно строить, поэтому на помощь нам приходит различное программное обеспечение. Нам стоит только выбрать подходящую программу и просто подставлять необходимые данные, а программа построит график за нас.
Существует множество возможностей вывести функцию, начнем с малого, а именно с вывода функции на ассемблере.
Для того что бы вывести результаты функции на экран, необходимо создать координатную ось. Для этого переместим курсор в координаты (0,0), для этого воспользуемся функцией, MoveToEx().
Mov x,0 ; x=0 Mov y,0 ; y=0 MoveToEx(HDC,x,y,LPPOINT) ; передаём в функцию значение координат и указатель на структуру POINT,там храниться координаты прошлой точки.
Переместив курсор на центр, теперь мы должны создать две линии, это сделать с помощью функции LineTo()
Mov a,5 ; a=10 Sub x,5 ;x-5 x=-5 Mov b,0 ;b=0 invoke MoveToEx ,HDC,x,y,LPPOINT ; перемещение курсора в (-5,0) invoke LineTo, HDC,a , b ; провели линию от (-5,0) в (5,0) ось х готова invoke MoveToEx , HDC,y,x,LPPOINT, ; перемещаем курсор в (0,-5) invoke LineTo, HDC, b, a ; проводим линию из (0,-5) в (0,5)
Теперь у нас появилась координатная ось x,y. Теперь нам нужен график функции, но для этого нужна функция. Возьмём простую функцию прямой y=2x+3. Нужно написать программу, которая будет считать y.
proc ChetY: ; метка mov al,x ; al=x mov bl,2 ;bl=2 mul bl ;al*bl mov a,ax ;a=ax add a,3 ;a+3 mov y,a ;y=a ret ; конец функции подсчёта y
Посчитав, y, теперь с помощью цикла мы можем прорисовывать прямые от одной точки до другой, а так как после использования функции LineTo(), курсор сдвигается в место, где заканчивается прямая, то мы можем сразу после этого нарисовать линию дальше.
Mov cx,7 ; счетчик циклов равен 7, будем выводить график по 7 точкам Mov x,cx ; х=сх call ChetY ; вызов функции подсчета y invoke MoveToEx HDC, x,y,LPPOINT ; переносим курсор Vivod: ;метка mov x,cx ; каждый раз сх будет уменьшаться, х тоже будет уменьшатся call ChetY invoke LineTo HDC,x,y ; рисуем линию от курсору в данную точку loop Vivod ; циклический переход на метку Vivod и cx--
Таким образом мы получили функцию, которая способна выводить график функции y=2x+3. Данный код показывает, что даже на ассемблере это не занимает много строчек, но и для людей, ведущих статистику он не подходит, так как именно в этом алгоритме, мы можем менять только значения х, ведь если мы изменим что-то другое, то код придётся переписывать. Почему мы должны использовать именно ассемблер для выполнения этой работы, это можно заметить в долгосрочном периоде так как, построение на ассемблере будет проходить быстрее, чем написанное на высокоуровневых языках, если мы возьмём 100000 операций, то ассемблер справиться с этой работой быстрее. Программа будет занимать очень мало памяти, что является плюсом, ведь так её можно поместить в контроллер, который будет присоединён к прибору, который будет чертить график на бумаге. Конечно же, главный минус - это объёмность кода. На высокоуровневом языке, можно было бы потратить меньше времени на решение подобной задачи. Но, опять же, так как программы на ассемблере работают быстрее, то в долгосрочном периоде мы сэкономим много времени.
Заключение
Мы рассмотрели алгоритм визуализации графика на ассемблере, выявили плюсы и минусы именно ассемблерной реализации.
Библиографические источники
Абрамова О.Ф. К вопросу о визуальном моделировании с использованием BOUML [Электронный ресурс] / О.Ф. Абрамова // NovaInfo.Ru : электрон. журнал. - 2016. - № 45, ч. 2. – Режим доступа : http://novainfo.ru/article/5873
Абрамова О.Ф. К вопросу о повышении эффективности функционирования тренажёрно-обучающих систем / О.Ф. Абрамова, М.Л. Цыганкова // Открытое и дистанционное образование. - 2014. - № 4. - C. 34-39.
Абрамова О.Ф. CASE-технологии: изучать или исключить? / О.Ф. Абрамова // Alma mater (Вестник высшей школы). - 2012. - № 9. - C. 109-110.
Абрамова О.Ф. Использование мультимедийных технологий в процессе обучения дисциплине "Компьютерная графика" / О.Ф. Абрамова, С.В. Белова // Успехи современного естествознания. - 2012. - № 3. - C. 90.
Волжанов А.А. Графический интерфейс как средство визуализации общения [Электронный ресурс] / А.А. Волжанов, О.Ф. Абрамова // Студенческий научный форум 2014 : докл. VI междунар. студ. электрон. науч. конф., 15 февр. – 31 марта 2014 г. Направл.: Технические науки / РАЕ. - М., 2014. - C. 1-4. – Режим доступа : http://www.scienceforum.ru/2014/pdf/6827.pdf.
Попиль М.А. Повышение качества статистического анализа поточных данных за счёт распознавания видеоизображений / М.А. Попиль, В.О. Александрова, О.Ф. Абрамова // Успехи современного естествознания. - 2012. - № 6. - C. 48.
Юрицын С.В. Обзор методов графической визуализации процесса моделирования информационных систем [Электронный ресурс] / С.В. Юрицын, О.Ф. Абрамова // Студенческий научный форум 2014 : докл. VI междунар. студ. электрон. науч. конф., 15 февр. – 31 марта 2014 г. Направл.: Технические науки / РАЕ. - М., 2014. - C. 1-5. – Режим доступа : http://www.scienceforum.ru/2014/pdf/7555.pdf.
Юрчук Д. Создание графических примитивов на Assembler [Электронный ресурс], режим доступа: https://habr.com/post/134495/, свободный (Дата обращения: 22.11.2018 г.)
Орлов С. Вывод в графическом режиме на ассемблере[Электронный ресурс], режим доступа: https://revolution.allbest.ru/ programming/00330696_0.html свободный (Дата обращения: 22.11.2018 г.)