Графика и ассемблер в 2020 - Студенческий научный форум

XIII Международная студенческая научная конференция Студенческий научный форум - 2021

Графика и ассемблер в 2020

Алексеенко А.А. 1, Абрамова О.Ф. 1
1ВПИ (филиал) ВолгГТУ
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

В 2020 году имеется огромное множество различных графических редакторов, программ и приложений, с помощью которых можно взаимодействовать с графикой. Разрабатываются они под различные задачи с использованием разнообразных языков программирования. У разработчиков на данный момент на вооружение находятся сотни различных графических редакторов, которые перекрывают весь спектр задач, и разработчик может выбрать наиболее подходящий под его задачу. Многие языки подходят под работу с графикой, но каким образом может быть связана графика и ассемблер в современных реалиях?

К сожалению или же к счастью, чистый ассемблер не используется в создание современной графики. Планка графики в 2020 году настолько высока, что с помощью ассемблера не представляется возможным хотя бы приблизиться к ней. Ассемблер низкоуровневый язык программирования и работа с графикой в нем очень трудоемка. Конечно, с помощью ассемблера можно создавать примитивы графики, оптимизировать ПО, но в язык ассемблер не были заложены возможности для разработки современной графики, проще говоря не для этого он создавался. Ассемблер ориентирован на повышение скорости вычислений и обработки данных, а не для создания современных графических изображений. Намного проще и быстрее создавать графические объекты и изображения на специальных языках программирования или программах, которые для этого и создавались, но с помощью ассемблера можно оптимизировать процесс их обработки.

Например, для создания самого примитивного 2D робота

Потребуется описать вот такой код

.386
.model stdcall, flat
option casemap:none
includelib kernel32.lib
include kernel32.inc
includelib user32.lib
include user32.inc
include windows.inc
include gdi32.inc
.data
hwnd dd 0
hInst dd 0
szTitleName db 'Робот', 0
szClassName db 'Приложение Win32', 0
msg MONMSGSTRUCT <?>
wc WNDCLASS <?>
ps PAINTSTRUCT <?>
.code
Main PROC
invoke GetModuleHandle, 0 ;получение значения баз. адреса,
mov hInst, eax ;по которому загружен модуль.
mov wc.style, CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS
mov wc.lpfnWndProc, offset WndProc ;адрес оконной процедуры
mov wc.cbClsExtra, 0
mov wc.cbWndExtra, 0
mov eax, hInst ;дескриптор приложения
mov wc.hInstance, eax ;в поле hInstance
invoke LoadIcon, 0, IDI_APPLICATION
mov wc.hIcon, eax ;дескриптор значка в поле hIcon
invoke LoadCursorA, 0, IDC_ARROW
mov wc.hCursor, eax ;дескриптор курсора в поле hCursor
mov wc.hbrBackground, WHITE_BRUSH ;цвет бекграунда окна белый
mov dword ptr wc.lpszMenuName, 0 ;главного меню нет
mov dword ptr wc.lpszClassName, offset szClassName ;имя класса окна
invoke RegisterClassA, offset wc ;регистрация класас окна
invoke CreateWindowEx, 0, offset szClassName, offset szTitleName, \
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, \
CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, hInst, 0
mov hwnd, eax ;создание окна
invoke ShowWindow, hwnd, SW_SHOWNORMAL ;показ окна
invoke UpdateWindow, hwnd ;перерисовывка содержимого окна
cycle1: ;цикл сообщений
invoke GetMessage, offset msg, 0, 0, 0
cmp ax, 0
je end_c
invoke TranslateMessage, offset msg ;трансляция ввода с клавиатуры
invoke DispatchMessage, offset msg ;отправляем сообщение
;оконной процедуре
jmp cycle1
end_c:
invoke ExitProcess, 0 ;выход из приложения

Main ENDP
WndProc PROC USES ebx edi esi, _hwnd:DWORD, _wmsg:DWORD, _wparam:DWORD, _lparam:DWORD
local _hdc:DWORD
cmp _wmsg, WM_DESTROY
je wmdestroy
cmp _wmsg, WM_PAINT
je wmpaint
invoke DefWindowProcA, _hwnd, _wmsg, _wparam, _lparam ;обраб. по умолчанию
jmp exit_proc
wmpaint:
invoke BeginPaint, _hwnd, offset ps ;получаем контекст устройства
mov _hdc, eax
invoke Rectangle, _hdc, 170, 120, 310, 260 ;тело
invoke Rectangle, _hdc, 120, 120, 170, 140 ;левая рука
invoke Rectangle, _hdc, 310, 120, 360, 140 ;правая рука
invoke Rectangle, _hdc, 170, 260, 190, 310 ;левая нога
invoke Rectangle, _hdc, 290, 260, 310, 310 ;правая нога
invoke Rectangle, _hdc, 210, 80, 270, 120 ;голова
invoke Rectangle, _hdc, 220, 85, 225, 90 ;левый глаз
invoke Rectangle, _hdc, 250, 85, 255, 90 ;правый глаз
invoke Rectangle, _hdc, 225, 105, 255, 120 ;рот
invoke EndPaint, _hdc, offset ps ;освобождаем контекст
mov eax, 0 ;возвращаемое значение - 0
jmp exit_proc
wmdestroy:
invoke PostQuitMessage, 0 ;послать сообщение WM_QUIT
mov eax, 0 ;возвращаемое значение - 0
exit_proc:
ret
WndProc ENDP
END Main

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

Для сравнения рисовка данного робота в AutoCAD (программное обеспечение для 2D и 3D проектирования) займет от силы минуту.

Н апример, создание вот такого простого 3D домика в AutoCAD занимает 10 минут.

А сколько труда, времени и строчек кода займет посторение такого же домика на ассемблере даже страшно представить.

Обобщая все вышесказанное можно сказать, что с помощью ассемблера возможно взаимодействовать с графикой, но сделать что-то, отвечающее требованиям 2020 года, не представляется возможным. С помощью ассемблера можно оптимизировать процесс вычислений для создания графики на языке специально разработанным для этих целей, т.е. ассемблер раскрывает свой потенциал только совместно с высокоуровневым языком программирования. Чистый ассемблер не используется для создания графики.

Библиографический список

Создание графических примитивов на Ассемблере https://habr.com/ru/post/134495/

AutoCAD 3D House Modeling (in 10 minutes) https://youtu.be/4SnqCCyjuv0

Абрамова О.Ф. Компьютерная графика. Избранные лекционные темы. Ч. 1: учеб. пособие / О.Ф. Абрамова. - Saarbrucken, 2012. - 129 с.

Абрамова О. Ф. Компьютерная графика [Электронный ресурс] : конспект лекций : учеб. пособие / О. Ф. Абрамова ; ВПИ (филиал) ВолгГТУ // Сборник "Учебные пособия". Серия «Естественнонаучные и технические дисциплины». Выпуск 3. - Волгоград, 2012. - 1 CD-ROM.

Абрамова О.Ф. Компьютерная графика: лабораторный практикум [Электронный ресурс]: учеб. пособие / О.Ф. Абрамова, Д.Н. Лясин; ВПИ (филиал) ВолгГТУ. - Волгоград, 2017. - 1 электрон. опт. диск (CD-ROM). - 74 с.

Абрамова О.Ф. Компьютерная графика: конспект лекций для студентов направлений 230100.62 «Информатика и вычислительная техника» и 231000.62 «Программная инженерия» [Электронный ресурс]: учеб. пособие / О.Ф. Абрамова; ВПИ (филиал) ВолгГТУ // Учебные пособия: сб. Серия «Естественнонаучные и технические дисциплины». Вып. 3. - 1 электрон. опт. диск (CD-ROM) ; формат pdf. - Волжский, 2012. - 165 с.

Просмотров работы: 7