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

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

Графический ввод-вывод на языке ассемблер

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

Введение

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

Операции ввода/вывода по прерыванию INT 21H

Уникальность ассемблера состоит в том, что он напрямую указывает процессору режим работы с графикой. В ассемблере существует множество режимов, которые определяются шестнадцатеричным числом, содержащимся в регистре АH. Рассмотрим эти примеры прерываний.

AH=01: Ввод с клавиатуры с отображением в консоли. Данная операция считывает с консолисимвол и помещает его в регистр AL. После считывания содержимое данного регистра представляет собой ASCII-символ. Если после считывания символа регистр AL будет равен 0, значит, с клавиатуры были нажаты специальные клавиши (F1, PgUp и т.д). Для определения их кода необходимо повторить запрос.

AH=02: Вывод символа в консоль. При выводе символа на экран в текущую позицию курсора необходимо поместить код данного символа в регистр DL.

AH=06: Ввод/вывод символов. Данный режим может использоваться, как для ввода, так и для вывода. Для вывода в консоль символа необходимо поместить его в DL и вызвать прерывание INT 21H. Для ввода символа необходимо занести в DL FFh и вызвать прерывание INT 21H. При использовании данной команды программа не остановиться, а продолжит выполняться в штатном режиме. При вводе символ поместиться в регистр AL.

AH=07:Ввод с клавиатуры без отображения в консоли. Данная команда работает аналогично с командой при AH=01H, но немного отличается. При вводе символа с клавиатуры он не отображается на экране.

AH=09H: Вывод строки в консоль. Для вывода строки необходимо, чтобы она заканчивалась специальным символом ($). Затем адрес начала строки помещается в регистр DX. Символ доллара в консоли не выводится.

Пример кода выполнения операции прерывания при AH=09H:

Str DB “Выводимая строка $”

Leadx, str; смещение регистра DX до начала строки

Movah, 9; Помещаем в ah 9 для вывода строки

Int 21h; Прерывание для вывода строки

AH=0AH: Ввод значений в буфер.При данном режиме работы данные помещаются в буфер, где определена максимальная длина введенной строки. Если при вводе, строка оказывается меньше в длинны буфера, то окончание ввода строки определяется символом клавиши [ENTER], если больше длины буфера, тогда пользователь предупреждается звуковым сигналом. При переполнении буфера введенная строка не учитывается. Во второй байт буфера возвращается реальная длинна введенной строки в байтах. Адрес буфера заносится в регистр DX. Таким образом, в первом байте находится максимальная длина вводимой строки, так как это поле является однобайтовым, значит максимальная длина будет равна 255 символов (FF- шестнадцатеричное представление). Во втором байте храниться реальное количество символов. В третьем байте хранятся введенные символы.

Ввод /вывод по прерыванию int 10H

Для вывода символов в консоль или их ввода используются различные команды DOS. Однако он не поддерживает смену цвета в консоли ни перемещение курсора, но возможности DOS можно увеличить при помощи драйвера ANSI.SYS. С графической составляющей всё гораздо хуже в DOS нет никаких графических команд. Зато можно переключить видеоадаптер в графический режим с помощью Esc-последовательностей. Для осуществления перехода необходимо обратиться к нижним уровням операционной системы, называемой BIOS (BasicIn-OutSystem). Программы Bios находятся в ПЗУ(постоянное запоминающее устройство). BIOS в отличии от DOS (все команды выполняются при помощи инструкций прерываний int 21h), выполнение команд осуществляется при помощи различный команд прерываний, то есть за каждым устройством закреплён определённая команда прерываний (клавиатура- int 16h, экран-int 10h, и так далее). Прерывание int 10h выполняет все команды видеоадаптера: вывод строк и символьной информации, смена шрифтов, смена цвета, работа с изображениями и т.д.

Пример: Вывод на экран горизонтальной прямой

;Устанавливаем графический режим

mov ah,00h ;(1)Команда для задания режима

mov al,10h ;(2)Входим в графический режим

int 10h ;(3)Вызов BIOS

;Рисуем линию

mov si,150 ;(4)si- Начальная координата (X)

mov cx,300 ;(5)Количество точек по горизонтали

liniya:

pushcx ;(6)Помещаем количество точек в стек

mov ax,0Ch ;(7)Команда вывода пикселя

mov al,4 ;(8)Устанавливаем цвет красный

mov bh,0 ;(9)Видеостраница

movcx,si ;(10)Х-координата (изменяется)

mov dx,175 ;(11)Y-координата (постоянная)

int 10h ;(12)Вызов BIOS

incsi ;(13)Инкремент Х-координаты

popcx ;(14)Восстановим количество шагов

loopliniya ;(15)Цикл из CX шагов

;Останавливаем программу для просмотра её работы

mov ah,08h ;(16)Команда ввода с клавиатуры без отображения в консоли

int 21h ;(17)Вызов DOS

;Переключаем видеоадаптер в текстовый режим

mov ah,00h ;(18)Команда задания режима

mov al,03h ;(19)Текстовый режим

int 10h ;(20)Вызов BIOS

В 1-3 строчках при помощи команды 00H вызвали прерывание Bios 10h и осуществили переключение видеоадаптера в режим графики. Затем поместили номер режима в регистр AL, всего существует порядка 256 разных режимов (текстовых и графических), однако на сегодняшний день используется порядка ста режимов. Команда прерывания int 10h обеспечивает графическое отображение с разрешением 640х350 пикселей и около 16 цветов.

Все изображения рисуются по точкам (пиксели) так как в BIOS нет команд для вывода каких либо геометрических фигур и нет команд закрашивающих области. Для вывода цветного пикселя на экран используется команда 0CH и прерывание int 10h. Данная команда необходима для занесения в регистр AL кода цвета, в BH- номера видеостраницы, в CX – координаты точки по оси Х в, в DX –координаты точки впо оси Y, все координаты вводятся в диапазоне от 0 до 639.

После того как программа завершила построение изображения в программе существует остановка для просмотра результата построения. Останавливаем программу при помощи команды DOS 08h (ввод символа без отображения на экране , что бы не портить графическое изображение),и при нажатии любой клавиши (кроме управляющих) программа возобновляет работу. Затем в конце программы выполняется переход обратно в стандартный текстовый режим. Если не перейти с графического режима в обычный , то он может помешать работу встроенной программы.

Рассмотрим параметры вызова команд 0Ch прерывания int 10h. Заносим номер видеостраницы, куда выводится данная точка, в регистр BH. А регистр AL заносим код цвета выводимого пикселя. Данный адаптер содержит 16 цветов. Данный набор из 16 цветов задаётся программно и может изменятся в любой момент выполнения программы.

Подведём итог графической работы BIOS и прерывания int 10h. Для вывода на экран изображений используется графический режим. Через прерывание int 10h устанавливается текстовый или графический режим. Для установки режима AH обнуляется и в AL заносится код режима работы, а затем выполняется прерывание 10H.


Заключение

В данной работе мы рассмотрели режимы работы графической составляющей языка ассемблер. И сделали вывод, что все образы и картинки состоят из точек(пикселей),а значит можно нарисовать любой графический объект, меняя координаты вывода следующего пикселя.

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

Абрамова О.Ф. К вопросу о визуальном моделировании с использованием BOUML [Электронный ресурс] / О.Ф. Абрамова // NovaInfo.Ru : электрон.журнал. - 2016. - № 45, ч. 2. – Режим доступа :http://novainfo.ru/article/5873

Волжанов А.А. Графический интерфейс как средство визуализации общения [Электронный ресурс] / А.А. Волжанов, О.Ф. Абрамова // Студенческий научный форум 2014 :докл. VI междунар. студ. электрон.науч. конф., 15 февр. – 31 марта 2014 г. Направл.: Технические науки / РАЕ. - М., 2014. - C. 1-4. – Режим доступа :http://www.scienceforum.ru/2014/pdf/6827.pdf.

Юрицын С.В. Обзор методов графической визуализации процесса моделирования информационных систем [Электронный ресурс] / С.В. Юрицын, О.Ф. Абрамова // Студенческий научный форум 2014 :докл. VI междунар. студ. электрон.науч. конф., 15 февр. – 31 марта 2014 г. Направл.: Технические науки / РАЕ. - М., 2014. - C. 1-5. – Режим доступа :http://www.scienceforum.ru/2014/pdf/7555.pdf.

Кузьмин Д.А. Исследование проблем изучения алгоритмов компьютерной графики [Электронный ресурс] / Д.А. Кузьмин, О.Ф. Абрамова // Студенческий научный форум – 2016 :докл. VIII междунар. студенч. электрон.науч. конф. Направление «Технические науки» (секция «Проблемы моделирования, проектирования и разработки программных средств») / РАЕ. - Москва, 2016. - 3 с. – Режим доступа :http://www.scienceforum.ru/2016/pdf/18526.pdf.

Морозов О. Е.Вывод простейших графических изображении[Электронный ресурс] / Морозов О. Е./электронная база “Здесь живут знания” - 2012 – статья 8 -Режим доступа :http://podelise.ru/docs/index-25143997-3.html

Графика и расширенные средства ввода/вывода в Ассемблере [Электронный ресурс]/ Лабораторная работа 3 – 2015 - Режим доступа: http://ecm2017.studga.ru/Лабораторные/Ассемблер/Lab%203.pdf

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