Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Программирование на языках высокого уровня




 

Основу работы компьютеров составляет выполнение последовательности действий, задаваемых машинным кодом. Машинный код можно непосредственно задавать на языке ассемблера - " языке низкого уровня". Для этого нужно иметь специальные знания об архитектуре компьютера и владеть соответствующими методами.
Языками высокого уровня (ЯВУ) называют языки программирования, которые позволяют задавать последовательность действий в более кратком и удобном для человека виде. Процедуры и структуры данных задаются в виде относительно удобочитаемых символических выражений. Программа на таком языке намного короче чем на ассемблере. К таким языкам относятся C/C++, Pascal, Fortran. Сущность этих языков заключается в том, что большие участки кода на ассемблере заменяются на короткие команды, такие как имена функций и описания структур данных.
Особенно важным ЯВУ является C/C++, поскольку он традиционно используется там, где ЯВУ нужен для удобства, чтобы не писать на ассемблере. Программа, написанная на ассемблере, имеет максимальное быстродействие. Программа на C/C++ работает почти так же быстро, как и на ассемблере, но некоторые вещи всё же лучше написать именно на ассемблере. Поэтому C/C++ (и другие ЯВУ) позволяет делать ассемблерные вставки - вставлять в программу кусок кода на языке ассемблера.
Поскольку задачи компьютерной графики требуют обработки большого числа точек изображения, эти задачи особенно чувствительны к скорости выполнения программ. Рассмотрим алгоритм Брезенхема для рисования отрезка. Реализуем его на C++ с использованием стандартной функции putpixel:

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

Теперь мы имеем код, который написан по-настоящему грамотно. Разумеется, в C++ имеется готовый графический пакет, в котором уже есть функция рисования отрезка, которая написана на ассемблере. При сравнительной проверке быстродействия выясняется, эта написанная нами функция рисования отрезка в 3 раза быстрей уже имеющейся. Это обусловлено тем, что мы пропустили некоторые дополнительные действия - например, проверку попадания точки за пределы экрана.
Специальная функция putpixel понадобилась нам ради обращения к видеопамяти. Если изображение просто хранится в памяти компьютера в виде массива, изменение его точек можно описать общими средствами языка, такими как обращение к ячейке массива и т.п. Таким образом, нам понадобится всего одна ассемблерная вставка. Всё остальное можно написать быстрым и без ассемблерных вставок, если соблюдать элементарную грамотность написания кода.
Наш пример дан для C++ под операционной системой MS-DOS на IBM PC. Код на ассемблере существенно различается для разных аппаратных платформ, и для разных операционных систем. Чтобы найти подходящий образец ассемблерной вставки, нужно иметь специальные знания, или обратиться к специальным источникам, где дан готовый образец кода.
Упомянем о таком приёме как работа с " экранными страницами". Изображение, которое отображено на экране, хранится в так называемой видеопамяти. Видеопамять - это участок оперативной памяти, который напрямую совмещён с чипом видеокарты. Такое совмещение позволяет управлять изображением на экране, записывая данные в оперативную память.
Видеопамять может быть во много раз (или хотя бы в два раза) больше, чем требуется для хранения изображения экрана. Тогда можно воспользоваться " экранными страницами" - хранить одновременно несколько изображений экрана, и мгновенно " листать" их. При этом просто меняют указатель, который задаёт участок памяти, отображаемый на экране, и кадры сменяются с той скоростью, которая предусмотрена частотой смены кадров видеокарты - например, 85 Герц. Во многих графических библиотеках для этого предусмотрены специальные команды.
" Экранные страницы" используются для получения анимации или просто быстро меняющегося изображения на экране монитора. Но они нужны только если вы контролируете весь экран целиком. Если вы работаете в среде с оконным интерфейсом, то для анимации достаточно просто иметь быстродействующие функции вывода изображения на экран.


Данная страница нарушает авторские права?





© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.