- •Фельдман с. К.
- •Isbn 5-88548-096-6
- •Десятичные ascii Шестнадцатеричные
- •Int 10h ;Вызвать bios
- •Функциональные клавиши Скэн-коды
- •If (Interrupt Flag) — флаг прерывания
- •Адрес в ds Шест. Знач. Номера байтов
- •Move macro tag rep movs&tag endm
- •1. Дамп памяти по адресу или в границах. Синтаксис:
- •2. Дамп памяти по адресу или в границах в коде ascii. Синтаксис:
- •Library file does not exist. Create?
- •Синтаксис Номер и текст сообщения
- •Title Macro File
- •Value dw 10 dup(?)
- •.Radix выражение
- •Формат Функция
- •Inc приемник
- •Imul источник
- •Idiv источник
- •Xor приемник,источник
- •Int substr (src, dest, num, len);
- •Int write_matr(int X, int y, int value);
- •Void main()
- •If(konf_b&0x1000 )
- •Void read_mbr(void); /* Чтение mbr */
- •Add cx,counter
- •Определение Число байтов
- •Include c:convert.Lib
- •Sz * a * p * c (* обозначает неиспользуемые биты)
Int 10h ;Вызвать bios
Для большинства применений команда прерывания DOS INT 21H более удобна.
AH=0E
Вывод в режиме телетайпа. Данная функция позволяет использовать монитор, как простой терминал.
Для выполнения этой функции необходимо установить в регистре AH шест. значение 0E, в регистр AL поместить выводимый символ, цвет текста (в графическом режиме) занести в регистр BL и номер страницы для текстового режима — в регистр BH. Звуковой сигнал (код 07H), возврат на одну позицию (08H), конец строки (0AH) и возврат каретки (0DH) действуют, как команды для форматизации экрана.
Данная функция автоматически продвигает курсор, переводит символы на следующую cтроку, выполняет прокрутку экрана и сохраняет текущие атрибуты экрана.
AH=0F
Получение текущего видео режима. Данная функция возвращает в регистре AL текущий видео режим, в pегистре AH — число символов в строке (20, 40 или 80), в регистре BH — номер страницы.
AH=13
Вывод символьной строки (только для AT). Данная функция позволяет на компьютерах типа AT выводить на экран символьные строки с установкой атрибутов и перемещением курсора:
MOV AH,13H ;Функция вывода на экран
MOV AL,сервис ;0, 1, 2 или 3
MOV BH,страница ;
LEA BP,адрес ;Адрес строки в ES:BP
MOV CX,длина ;Длина строки
MOV DX,экран ;Координаты на экране
INT 10H ;Вызвать BIOS
Возможен следующий дополнительный сервис:
u 0 — использовать атрибут и не перемещать курсор;
u 1 — использовать атрибут и переместить курсор;
u 2 — вывести символ, затем атрибут и не перемещать курсор;
u 3 — вывести символ, затем атрибут и переместить курсор.
4
Расширенный ASCII код
ASCII-коды от 128 до 255 (шест. 80-FF) представляют собой ряд специальных символов полезных при формировании запросов, меню, специальных значков с экранными атрибутами. Например, используя cледующие символы можно нарисовать прямоугольник:
DA
Верхний левый угол
BF
Верхний правый угол
C0
Нижний левый угол
D9
Нижний правый угол
C4
Горизонтальная линия
B3
Вертикальная линия
Следующие команды с помощью INT 10H выводят горизонтальную линию на 25 позиций в длину:
MOV AH,09 ;Функция вывода на экран
MOV AL,0C4H ;Горизонтальная линия
MOV BH,00 ;Страница 0
MOV BL,0FH ;Выделение яркостью
MOV CX,25 ;25 повторений
MOV 10H ;Вызвать BIOS
Напомним, что курсор не перемещается.
Вывод вертикальной линии включает цикл, в котором курсор перемещается вниз на одну строку и выводится символ шест. B3. Для штриховки может быть полезен символ с точками внутри:
B0
Одна четверть точек (светлая штриховка)
B1
Половина точек (средняя штриховка)
B2
Три четверти точек (темная штриховка)
Можно извлечь много полезных идей, изучая программное обеспечение с профессионально организованным выводом, или самому изобрести оригинальные идеи для отображения информации.
4
Другие операции ввода/вывода
Ниже перечислены другие функции DOS, которые могут оказаться полезными в работе. Код функции устанавливается в регистре AH и, затем, выдается команда INT 21H.
AH=01
Ввод с клавиатуры с эхо отображением. Данная функция возвращает значение в регистре AL. В случае, если содержимое AL не равно нулю, то оно представляет собой стандартный ASCII-cимвол, например, букву или цифру. Нулевое значение в регистре AL свидетельствует о том, что на клавиатуре была нажата специальная функциональная клавиша, например, Номе, F1 или PgUp. Для определения скэн-кода клавиш, необходимо повторить вызов функции. Данная функция реагирует на запрос Ctrl/Break.
AH=02
Вывод символа. Для вывода символа на экран в текущую позицию курсора необходимо поместить код данного символа в pегистр DL. Коды табуляции, возврата каретки и конца строки действуют обычным образом.
AH=07
Прямой ввод с клавиатуры без эхо отображения. Данная функция работает аналогично функции 01 с двумя отличиями: введенный символ не отображается на экране, то есть, нет эхо, и oтсутствует реакция на запрос Ctrl/Break.
AH=08
Ввод с клавиатуры без эхо отображения. Данная функция действует аналогично функции 01 с одним отличием: введенный символ не отображается на экран, то есть, нет эхо.
AH=0B
Проверка состояния клавиатуры. Данная функция возвращает шест. FF в регистре AL, если ввод с клавиатуры возможен, в противном случае — 00. Это средство связано с функциями 01, 07 и 08, которые не ожидают ввода с клавиатуры.
4
Ввод с клавиатуры по команде BIOS INT 16H
Команда BIOS INT 16H выполняет специальную операцию, которая в соответствии с кодом в регистре AH обеспечивает следующие три функции ввода с клавиатуры.
AH=00
Чтение символа. Данная функция помещает в регистр AL oчередной ASCII символ, введенный с клавиатуры, и устанавливает скэн-код в регистре AH. В случае, если на клавиатуре нажата одна из специальных клавишей, например, Номе или F1, то в регистр AL заносится 00. Автоматическое эхо символа на экран по этой функции не происходит.
AH=01
Определение наличия введенного символа. Данная функция сбрасывает флаг нуля (ZF=0), если имеется символ для чтения с клавиатуры; очередной символ и скэн-код будут помещены в регистры AL и AH соответственно и данный элемент останется в буфере.
AH=02
Определение текущего состояния клавиатуры. Данная функция возвращает в регистре AL состояние клавиатуры из адреса памяти:
Бит
7
Состояние вставки активно (Ins)
6
Состояние фиксации верхнего регистра (Caps Lock) переключено
5
Состояние фиксации цифровой клавиатуры (Num Lock) переключено
4
Состояние фиксации прокрутки (Scroll Lock) переключено
3
Нажата комбинация клавишей Alt/Shift
2
Нажата комбинация клавишей Ctrl/Shift
1
Нажата левая клавиша Shift
0
Нажата правая клавиша Shift
4
Функциональные клавиши
Клавиатура располагает тремя основными типами клавишей:
1. Символьные (алфавитно-цифровые) клавиши: буквы от a до z, цифры от 0 до 9, символы %, $, # и так далее.
2. Функциональные клавиши: Номе, End, Возврат на позицию, стрелки, Enter, Del, Ins, PgUp, PgDn и программно-функциональные клавиши.
3. Управляющие клавиши: Alt, Ctrl и Shift, которые работают совместно с другими клавишами.
Функциональная клавиша не вырабатывает какой-либо символ, но чаще формирует запрос на некоторые действия. Аппаратная реализация не требует от функциональных клавишей выполнения каких-либо специфических действий.
Задачей программиста является определить, например, что нажатие клавиши Номе должно привести к установке курсора в верхний левый угол экрана, или нажатие клавиши End должно установить курсор в конец текста на экране.
Можно легко запрограммировать функциональные клавиши для выполнения самых различных действий.
Каждая клавиша имеет собственный скэн-код от 1 (Esc) до 83 (Del) или от шест.01 до шест.53. Посредством этих скэн-кодов программа может определить нажатие любой клавиши. Например, запрос на ввод одного символа с клавиатуры включает загрузку 00 в регистр AH и обращение к BIOS через INT 16H:
MOV AH,00 ;Функция ввода с клавиатуры
INT 16H ;Вызвать BIOS
Данная операция имеет два типа ответов в зависимости от того, нажата символьная клавиша или функциональная. Для символа (например, буква A) клавиатура посылает в компьютер два элемента информации:
1. ASCII-код символа A (шест.41) в регистре AL;
2. Скэн-код для клавиши A (шест.1E) в регистре AH.
В случае, если нажата функциональная клавиша (например, Ins) клавиатура также передает два элемента:
1. Нуль в регистре AL;
2. Скэн-код для клавиши Ins (шест.52) в регистре AH.
Таким образом, после выполнения команды INT 16H необходимо прежде проверить содержимое регистра AL. В случае, если AL содержит нуль, то была нажата функциональная клавиша, если не нуль, то получен код символьной клавиши.
Скэн-коды
Клавиатура имеет по две клавиши для таких символов как *, + и -. Нажатие «звездочки», например, устанавливает код символа шест.2A в регистре AL и один из двух скэн-кодов в регистре AH в зависимости от того, какая из клавишей была нажата: шест.09 для звездочки над цифрой 8 или шест.29 для звездочки на клавише PrtSc.