- •Вычисление некоторых элементарных функций с помощью сопроцессора.
- •Принципы работы
- •Префикс команд и адресация операндов
- •Форматы данных
- •Вещественные числа
- •Целые числа
- •Регистры сопроцессора
- •Численные регистры
- •Регистр управления
- •Регистр тегов
- •Регистр состояния
- •Регистры указателя команды и указателя операнда
- •Система команд сопроцессора
- •Ввод с клавиатуры и вывод данных на экран с помощью функций dos.
- •Сравнительная характеристика функций dos ввода с клавиатуры
- •Функции dos вывода данных на экран
- •ФункцииBios для работы с клавиатурой. Чтение символа с ожиданием
- •Проверка буфера на наличие в нем символов
- •Получение состояния переключающих клавиш
- •Установка временных характеристик клавиатуры
- •Запись символов в буфер клавиатуры
- •Чтение символа с ожиданием для 101-клавишной клавиатуры
- •Проверка буфера на наличие в нем символов для 101-клавишной клавиатуры
- •Получение состояния переключающих клавиш для 101-клавишной клавиатуры
- •Получение состояния переключающих клавиш для 101-клавишной клавиатуры
- •Функции bios для работы с экраном
- •Функции работы с памятью.
- •Описание:
Получение состояния переключающих клавиш для 101-клавишной клавиатуры
На входе: AH = 12h.
На выходе: AL = Байт состояния переключающих клавиш.
Функция возвращает в регистре AL состояние переключающих клавиш (Shift, Ctrl, Alt, ScrollLock, NumLock, CapsLock, Ins):
Биты Значение
0 Нажата левая клавиша Shift вместе с Ctrl.
1 Нажата левая клавиша Shift вместе с Alt.
2 Нажата правая клавиша Shift вместе с Ctrl.
3 Нажата правая клавиша Shift вместе с Alt.
4 Нажата клавиша ScrollLock.
5 Нажата клавиша NumLock.
6 Нажата клавиша CapsLock.
7 Нажата клавиша SysReq.
Функция 12h аналогична функции 02h, но она предназначена для работы с клавиатурой, имеющей 101 клавишу и имеет другой формат байта состояния.
Эта функция определена для BIOS, изготовленной не раньше 15 декабря 1985 года.
Получение состояния переключающих клавиш для 101-клавишной клавиатуры
На входе: AH = 12h.
На выходе: AL = Байт состояния переключающих клавиш.
Функция возвращает в регистре AL состояние переключающих клавиш (Shift, Ctrl, Alt, ScrollLock, NumLock, CapsLock, Ins):
Биты Значение
0 Нажата левая клавиша Shift вместе с Ctrl.
1 Нажата левая клавиша Shift вместе с Alt.
2 Нажата правая клавиша Shift вместе с Ctrl.
3 Нажата правая клавиша Shift вместе с Alt.
4 Нажата клавиша ScrollLock.
5 Нажата клавиша NumLock.
6 Нажата клавиша CapsLock.
7 Нажата клавиша SysReq.
Функция 12h аналогична функции 02h, но она предназначена для работы с клавиатурой, имеющей 101 клавишу и имеет другой формат байта состояния.
Эта функция определена для BIOS, изготовленной не раньше 15 декабря 1985 года.
Функции bios для работы с экраном
Работа с экраном средствами BIOS производится с помощью набора функций прерывания 10h. С помощью этих функций поддерживаются текстовый и графический режимы работы монитора. В данном разделе будут рассмотрены некоторые функции вывода текста в текстовом режиме.
Установка видеорежима (00h int 10h)
Любой дисплейный адаптер поддерживает несколько текстовых и графических режимов. Переключение между эт000h режимами производится с помощью функции 00h int 10h. Вход: АН = 00h установить видеорежим: AL - номер видеорежима (если бит 7 регистра AL = 0, то экран очищается, в обратном случае (AL. 7=1) содержимое экрана не изменяется). Номеров видеорежимов много, нумерация режимов с высоким разрешением (SVGA) зависит от производителя видеоадаптера. Мы не будет приводить никаких сведений по этому поводу, при необходимости информацию о нумерации видеорежимов можно получить из соответствующих источников.
Установка позиции курсора (02h int 10h)
Функция 02h позволяет изменить позицию курсора и сделать ее начальной для последующего вывода. Заметим, что среди функций MS DOS нет подобной функции и функцию 02h int 10h BIOS можно использовать в комбинации с функциями MS DOS для организации форматированного вывода на экран. Вход: АН = 02h — установить позицию курсора: ВН = номер видеостраницы (зависит от используемого видеорежима); DH = строка (00h — верх); DL = ко-" лонка (00h — левая).
Получение позиции курсора (03h int 10h)
Функция 03h позволяет получить текущую позицию курсора. Аналогично сказанному выше, среди функций MS-DOS нет подобной функции и функцию 03h > int 10h BIOS также можно использовать в комбинации с функциями MS-DOS. Вход: АН = 03h — получить позицию курсора; ВН - номер видеостраницы (зависит от используемого видеорежима). Выход: DH = строка текущей позиции курсора (00h — верх); DL - колонка текущей позиции (00h — левая); СН = номер начальной строки курсора; CL = номер последней строки курсора.
Запись символа и его атрибута в видеопамять (09h int 10h)
Функция 09h предназначена для записи ASCII-кода символа и его атрибута непосредственно в видеопамять, причем сделать это можно с количеством повторений, заданных в регистре СХ. Вход: АН = 09h — запись символа и его атрибута в текущую позицию курсора: ВН = номер видеостраницы; AL = ASCII-код символа; BL = байт-атрибут; СХ = число повторений. Для вывода одного символа содержимое регистра СХ должно быть равно 1. В текстовом режиме для СХ>1 вывод осуществляется до конца текущей строки, после чего переходит на другую строку. Кодировка байта-атрибута в этой и других функциях производится в соответствии со следующими таблицами.
Номера битов |
Значение |
7 |
Мигающий символ |
6..4 |
Цвет фона |
3 |
Символ яркого цвета |
2..0 |
Символ цвета |
Биты |
Цвет |
Яркий цвет |
000b |
Черный |
Темно-серый |
001b |
Синий |
Светло-синий |
010b |
Зеленый |
Светло-зеленый |
011b |
Голубой |
Светло-голубой |
100b |
Красный |
Светло-красный |
101b |
Пурпурный |
Светло-пурпурный |
110b |
Коричневый |
Желтый |
111b |
Светло-серый |
Белый |
Чтение символа и его атрибута из видеопамяти (08h int 10h)
В памяти видеоадаптера каждый символ представлен двумя байтами, содержащими ASCII-код символа и его байт-атрибут. Функция 08h BIOS позволяет прочитать код символа и его атрибут непосредственно из видеопамяти. Вход: АН = 08h — чтение символа и его атрибута в текущей позиции курсора; ВН = номер видеостраницы. Выход: AL = ASCII-код символа; АН = байт-атрибут. Ниже приведена программа, которая устанавливает курсор в заданную позицию.
:prg05_04.asm. устанавливающая курсор в заданную позицию.
.code main:
xorbh.bh
mov dh.10
movdl.10
movah.02h
int 10h установили позицию курсора (10.10) записываем символ и атрибут в видеопамять
moval. "a"
mov bl,10001100b :атрибут - ярко-красный мигающий
movcx.5 ;повторить 5 раз
movah.09h
int 10h :прочитаем символ из текущей позиции видеопамяти:
mov ah,08h
int 10h : выясним текущую позицию курсора
хог bh.bh
mov ап.ОЗn
kint 10h установили позицию курсора (10.10)
:все результаты смотрим в отладчике
Важно отметить, что текущая позиция курсора после выполнения функций 08п и 09п осталась неизменной. Отсюда следует важный вывод о том, что при использовании этих функций необходимо также заботиться и о движении курсора функцией 02h. BIOS предоставляет функцию 0Eh, которая выводит символ в режиме телетайпа, предполагающем автоматическую корректировку текущей позиции курсора после вывода символа.
Запись символа в видеопамять (0Ah int 10h)
Функция 0Ah предназначена для записи ASCII-кода символа с текущим значением атрибута в данной позиции непосредственно в видеопамять, причем сделать это можно с количеством повторений, заданных в регистре СХ. Вход: АН = 0Ah — запись символа в текущую позицию курсора; ВН = номер видеостраницы; AL = ASCII-код символа; СХ = число повторений. Аналогично функции 09h текущая позиция курсора не изменяется.
Запись символа в режиме телетайпа (0Eh int 10h)
Функция 0Eh выводит символ в текущую позицию курсора с автоматическим ее смещением (в отличие от функций 09h и 0Ah). Вход: АН = 0Eh — запись символа в текущую позицию курсора; ВН = номер видеостраницы; AL ¦¦ ASCII-код символа; СХ = число повторений. Запись символа в последнюю позицию строки автоматически переводит кур-Ь cop в первую позицию следующей строки.
Вывод строки (13h int 10h)
Эта функция появилась в BIOS компьютеров архитектуры AT. Вход: АН = 13h вывод строки (AT); AL = режим записи: бит 0 — после вывода курсор в конец строки; бит 1 — каждый символ в строке представлен двумя байтами: байтом с ASCII-кодом и байтом-атрибутом; бит 2..7 — резерв; ВН = номер видеостраницы; BL = байт атрибут, если строка содержит только символы (AL. 1=0); СХ = число символов в строке; DH, DL = строка и столбец начала вывода строки; ES: ВР — адрес в памяти начала строки.
Обратите внимание, что содержимое строки для вывода может быть двух типов: с байтом-атрибутом, сопровождающим каждый символ строки, и без байта-атрибута. В последнем случае строка состоит из одних кодов символов с единым значением байта-атрибута, указываемым в регистре BL. Как видно из рассуждения выше, многие функции BIOS работают непосредственно с видеопамятью. Из-за того что для видеопамяти отводится определенный диапазон адресов (для текстового режима — это 0b800h:0000h), доступ к ней можно производить обычными командами работы с памятью микропроцессора, в том числе и цепочечными.
Перемещение в окне вверх (06h int 10h)
Функция 06h позволяет определить на экране окно, в котрром возможно прокрутить определенное количество строк вверх. При такой прокрутке верхние строки исчезают и снизу добавляются пустые строки. Вход: АН = 06h — перемещение строк в окне вверх; AL = число строк для заполнения снизу; ВН = атрибут символов (цвет) в строке для заполнения; СН и CL = строка и столбец верхнего левого угла окна; DH и DL = строка и столбец нижнего правого угла окна. Строки для заполнения снизу имеют цвет, определенный в ВН. Если указать AL=0, то окно очистится и заполнится строками с цветом, заданным байтом-атрибутом в ВН.
