Функции DOS и BIOS для ввода/вывода 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Функции DOS и BIOS для ввода/вывода



Ввод символа:

Функции ДОС:

Функция ДОС INT 21/01 – ввод с клавиатуры (Стандартного входного потока) символа с повтором его на экране (эхо-повтор), возвращает ASCII-код символа в регистре AL. Если имеется старшая часть кода, то есть ASCII-код расширенный (extended ASCII), используется для клавиш, не являющихся алфавитно-цифровыми: F1…F12, комбинации с ALT, CTRL, SHIFT; требуется двойной вызов данной функции (первый раз возвращается 0).

Функции 03-08 имеют аналогичный формат.

Функция ДОС INT 21/03 аналогичный формат, только ввод производится с последовательного порта (по умолчанию, COM1)

Функция ДОС INT 21/07 – ввод с клавиатуры (нефильтрованный, нажатие CTRL-BREAK не определяется), без эхо-повтора на экране.

Функция ДОС INT 21/08 – ввод с клавиатуры, без эхо-повтора на экране.

Функция ДОС INT 21/0C – ввод с очисткой буфера (в AL – номер функции (01,06,07,08,0A)

 

Функции BIOS:

Функции BIOS INT 16/00 – возвращает в AL – ASCII код, в AH – Scan Code (аппаратный шестнадцатеричный код нажатой клавиши), однако если нажата клавиша, использующая расширенный ASCII-код, то AL=0,AH=Расширенный ASCII-код.

Функция BIOS INT 16/01 – устанавливает флаг ZF, если есть символ во входном потоке; в остальном аналогична функции 00.

Может еще понадобиться функция 05 – поместить символ во входной поток (символ в CL)

 

Вывод символа:

Функции ДОС:

Функция ДОС INT 21/02 - вывод символа на экран (стандартный выходной поток), символ задается в DL, интерпретируются управляющие символы (08 – возврат курсора на одну позицию, 0А – переход на строку вниз и т.п.)

Функция ДОС INT 21/04 – аналогичный формат, только вывод в последовательный порт.

Функция ДОС INT 21/05 -тоже, стандартный вывод на принтер (в порт LPT).

Функции BIOS:

Функция BIOS INT10/0E – AL – выводимый символ, интерпретируются управляющие символы. (BL – цвет фона для графических режимов)

Функция BIOS INT10/0A – тоже, но BH =0 (страница видеопамяти, основная), в CX можно задать количество повторений, управляющие символы не интерпретируются

Функция BIOS INT 10/09 – тоже, но в BL задаются атрибуты (цвет) символа.

 

Функция в/в ДОС INT 21/06 – если DL = FF - то выполняется ввод, иначе вывод символа. Введенный символ возвращается в AL – как и в функциях 01,07,08; однако в отличие от них ДОС НЕ ОЖИДАЕТ, пока символ появится (будет нажата клавиша), если символа не появится, то на выходе будет установлен флаг ZF.

 

Пример использования:

Цикл «пока не будет нажата какая-либо клавиша, продолжать действия»

Cicl:

Mov ah,06

Mov dl,0FFh

Int 21h

Jnz Symbol_Ready;Переход, если клавиша нажата

…..; действия пользователя

jmp Cicl

Symbol_ready:

 

 

Функции BIOS и DOS для ввода/вывода строки символов:

В ряде случаев целесообразно организовать ввод строки символов как последовательный ввод символов по отдельности (например, если строка может состоять только из определенных символов):

Функция ДОС INT 21/09 – вывод строки, DS:DX – адрес строки, должна заканчиваться символом ‘ $

Функция ДОС INT 21/0A – ввод строки, DS:DX буфер, организованный след. Образом – первый байт – максимальное количество символов в строке, во втором байте возвращается реальное количество введенных символов, начиная с третьего байта расположена сама строка, заканчивающаяся кодом «Enter»-а – 0Dh

 

    H E L ODh

Функции BIOS ввода строки с клавиатуры отсутствуют. Функции вывода есть, но достаточны громоздки (рекомендуется использовать посимвольный вывод)

Функция BIOS INT 10/13 – вывод строки ES:Bp, длиной в CX,

AL=0, - строка символов, курсор не двигается

AL=1, - строка символов, курсор передвигается в конец строки

AL=2, - последовательность симв., атриб., симв., атриб, курсор не двигается

AL=3, - последовательность симв., атриб., симв., атриб, курсор передвигается в конец строки

Пример – ввод строки, состоящей только из числовых символов

Mov bx,offset string;адрес начала

Nov_vvod:

Mov ah,01

Int 21h; ввод

Cmp al,’0’

Jl nov_vvod

Cmp al,’9’

Jg nov_vvod

Mov [bx],al

Inc bx

Jmp nov_vvod

…….

String db 10 dup (?)

Помимо ввода/вывода с клавиатуры программа также может получать данные с командной строки. То, что указывается после имени программы при её запуске, называется параметрами командной строки (они разделяются пробелами). В частности, при использовании нами Tlink.exe параметры командной строки – lab3.obj и /t. Командная строка при запуске программы расположена по адресу DS:0080h в формате Длина строки, строка, заканчивающаяся кодом 0Dh.

Кроме процедур в программе также можно использовать макросы – последовательность команд, на которую компилятор заменяет название макроса (макрокоманды) в тексте программы. Например, чтобы не писать много раз при выводе на экран последовательность из 3-х команд, можно оформить их в виде следующей макрокоманды.

Print macro x

Mov dx,offset x

Mov ah,09

Int 21h

Endm

Описание макрокоманды делается вначале (после org 100h и перед start:).

Тогда, если приходится выводить в программе много разных сообщений, можно каждый раз писать одну команду вместо трех:

 

Mov ah,09h Mov dx,offset msg1 -> Int 21h     Print msg1

Сам машинный код от этого не изменится, просто сократится время набирания программы. Компилятор ассемблера, встретив в тексте Print заменит его на последовательность 3-х команд, описанных в макросе, а «х» (параметр макрокоманды в описании) заменит на msg1.

Работа с экраном.

Экран (дисплей) с точки зрения программиста на ассемблере – тоже массив цифровой информации. Этот массив хранится в специальной области памяти, называемой видеопамять. Содержимое «текстовой» видеопамяти (то есть отображение экрана в текстовом режиме) начинается с адреса B800:0000, графической A000:0000. Видеоадаптер считывает данные области памяти и отображает на экране информацию в соответствии с режимом работы (текстовым или графическим).

Экран для программиста как бы состоит из отдельных ячеек, которые имеют свои координаты, отсчитываемые по горизонтали и вертикали (столбцы и строки). Координаты начинаются с 0. В текстовом режиме в ячейке может быть записан какой-либо символ, всего таких ячеек в зависимости от режима либо 80х25, либо 40х25 (столбцов х строк) в зависимости от режима экрана. В графическом режиме – точка (пиксель), которых опять же в зависимости от режима может быть от 320х200 до 1024х768 и более (по горизонтали х по вертикали).

В текстовой видеопамяти за каждую «ячейку» отвечают 2 байта – в первом содержится ASCII-код символа, во второй – байт атрибутов. Байт атрибутов определяет цвет символа и фона. Соответственно по адресу B800:0000 находится ASCII-код первого символа (в верхнем левом углу), B800:0001 – цвет его и фона, B800:0002 – второй символ и т.д.

Байт атрибутов организован следующим образом –

 

Бит интенсивности отвечает за яркость символа (1 – яркий), признак мерцания (1 – символ мерцает на экране). Биты R – red – красный, G – green – зеленый, B – blue – синий отвечают за соответствующие цвета. С помощью их комбинаций (как и в фотографии, где изображение формируется из трех основных цветов) и определяется цвета символа и фона. Например, 001 –синий, 010 – зеленый, 100 – красный, 011 – желтый и т.п.

В графической видеопамяти каждый байт (для режимов с количеством цветов до 16, иначе используются несколько байт) отвечает за отдельный пиксель и обозначает его цвет – адресу A000:0000 соответствует цвет точки с координатами (0,0) – левый верхний угол экрана, A000:0001 – точке с координатами (0,1) и т.д.

 

 

Установка видеорежима



Поделиться:


Последнее изменение этой страницы: 2016-12-17; просмотров: 1311; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.211.66 (0.009 с.)