
- •В. Синицина
- •Содержание
- •Введение
- •Лабораторная работа № 1
- •1.2.2 Путь выполнения команды
- •1.2.3 Трансляция программы. Опции командной строки
- •1.2.4 Структура программы для .Exe- и .Com-файлов. Образ программы в памяти
- •%Title "Имя exe-файла программы"
- •%Title "Имя com – файла программы"
- •1.2.5 Работа с отладчиком Turbo Debugger (td)
- •1.2.6 Форматы машинных команд и их кодирование
- •1.2.7 Работа над синтаксическими ошибками при ассемблировании программы
- •1.3. Задание к работе. Порядок выполнения
- •1.4 Контрольные вопросы
- •Лабораторная работа №2 преобразование форматов числовых данных в операциях ввода-вывода
- •2.1 Целевые установки
- •2.2 Методические рекомендации
- •2.2.1 Представление знаковых и беззнаковых чисел в 16-разрядном компьютере
- •2.2.2 Преобразование ascii-кодов чисел с произвольным основанием в двоичное число
- •2.2.3 Преобразование двоичного числа в ascii-строку числа по произвольному основанию
- •2.2.4 Задание к работе. Порядок выполнения
- •2.2.5 Вопросы построения многомодульных программ
- •%Title "#dec_bin.Asm"
- •%Title"#10bin10.Asm"
- •2.2.6 Ассемблирование и компоновка отдельных модулей в программу. Создание библиотеки объектных модулей
- •2.3 Контрольные вопросы
- •Лабораторная работа № 3
- •3.3. Задания к лабораторной работе
- •4.2.2 Краткие комментарии к динамической библиотеке
- •4.3 Контрольные вопросы
- •5.2.2 Ввод с клавиатуры символьной информации
- •5.2.3 Функции dos вывода данных на экран
- •5.2.4 Расширенные коды ascii и управление программой с клавиатуры
- •5.2.5 Строковые команды. Общая характеристика
- •5.3 Задания к работе. Подготовка и выполнение
- •5.4 Контрольные вопросы
- •Лабораторная работа № 6
- •6.2.2 Прямое программирование видеобуфера в текстовом режиме
- •6.2.3 Справочные данные по функциям bios Прерывание int 10h. Видеофункции bios
- •Рекомендации по использованию видеосервиса bios
- •Прерывание int 16h
- •Задержка программных операций
- •Int 15h, функция 86h
- •6.3 Варианты индивидуального задания
- •6.4 Контрольные вопросы
- •Лабораторная работа № 7
- •7.2.2 Oчиcткa буфepa клaвиaтуpы
- •7.2.3 Пpoвepкa cимвoлoв в буфepe
- •7.2.4 Oжидaть ввoд cимвoлa и нe вывoдить eгo нa экpaн
- •7.2.5 Oжидaниe нaжaтия клaвиши и эxo нa экpaн
- •7.2.6 Пpиeм cимвoлa бeз oжидaния
- •7.2.7 Пoлучeниe cтpoки cимвoлoв
- •7.2.8 Пpoвepкa/уcтaнoвкa cтaтуca клaвиш-пepeключaтeлeй
- •7.2.9 Haпиcaниe пpoцeдуpы ввoдa c клaвиaтуpы oбщeгo нaзнaчeния
- •7.2.10 Пepeпpoгpaммиpoвaниe пpepывaния клaвиaтуpы
- •7.2.11 Пepeпpoгpaммиpoвaниe oтдeльныx клaвиш
- •7.2.12 Cвoднaя тaблицa cкaн-кoдoв
- •7.2.13 Cвoднaя тaблицa pacшиpeнныx кoдoв
- •Лабораторная работа № 8
- •8.3 Задания к лабораторной работе
- •Лабораторная работа №9
- •9.2.2 Пpoгpaммиpoвaниe микpocxeмы uart 8250
- •9.2.3 Инициaлизaция пocлeдoвaтeльнoгo пopтa
- •9.2.4 Уcтaнoвкa тeкущeгo кoммуникaциoннoгo пopтa
- •9.2.5 Oпpeдeлeниe cтaтуca кoммуникaциoннoгo пopтa
- •9.2.6 Инициaлизaция и упpaвлeниe мoдeмoм
- •9.2.7 Пepeдaчa дaнныx
- •9.2.8 Пoлучeниe дaнныx
- •9.2.9 Пocылкa/пoлучeниe дaнныx c пoмoщью кoммуникaциoннoгo пpepывaния
- •Список использованных источников
5.2.4 Расширенные коды ascii и управление программой с клавиатуры
Процесс считывания ASCII-кодов клавиш клавиатуры с помощью системных функцийDOSотносится к алфавитно-цифровым клавишам, за которыми закрепленыASCII-таблицей отображаемые символы (буквы, цифры, знаки препинания и др.). Кроме них, на клавиатуре персонального компьютера имеется ряд клавиш, которым не назначены какие-либо отображаемые символы. Это, например, функциональные клавиши<F1>,...,<F12>,клавиши управления курсором<Home>, <End>, ... , <Стрелка вправо>, Стрелка вниз, специальные клавиши Ins, <Del>, а также использующие на практике различные сочетания клавиш с <Ctrl>, <Alt> и <Shift>. В этом случае, в качествеscan-кода клавиши или какой-либо комбинации из них выступает также старший байт кодового слова, но уже при нулевом младшем байте (нулевом кодеASCII). Например, при нажатии клавиши<F1>в кольцевой буфер ввода клавиатуры поступает код3B00h, а клавиши<Home> – 4700h.
Двухбайтовые коды клавиш, содержащие на месте кода ASCII – ноль, называются расширенными кодами ASCII. Эти коды (и соответствующие им клавиши) широко используются для управления программами. Для доказательства этого утверждения достаточно указать на популярную оболочкуDOS– Norton Commander. Широкое использование в компьютерах интерактивных средств требовало расширение возможностей ввода с клавиатуры управляющей информации, которую программа должна отличать от вводимого текста. Поэтому расширенные кодыASCIIгенерируются и всеми алфавитно-цифровыми клавишами, если они нажимаются совместно с клавишей<Alt>. В табл. 5.2 приведены значения расширенныхASCII-кодов для одиночных клавиш.
Таблица5.2
Расширенные коды для функциональных клавиш
|
|
|
|
Клавиша |
Код (hex) |
Клавиша |
Код (hex) | |||||||||||||
Клавиша |
Код (hex) |
Клавиша |
Код (hex) |
Правая часть клавиатуры. "Num Lock-выкл" | ||||||||||||||||
<F1> <F2> <F3> <F4> <F5> <F6> |
3B 3C 3D 3E 3F 40 |
<F7> <F8> <F9> <F10> <F11> <F12> |
41 42 43 44 85 86 |
<Home> <PgUp> 5 |
47 48 49 4B 4C 4D |
<End> <PgDn> Ins Del
|
4F 50 51 52 53
| |||||||||||||
В составе комбинации Alt+<Клавиша> | ||||||||||||||||||||
A B C D E F G H I J K L |
1E 30 2E 20 12 21 22 23 17 24 25 26 |
M N O P Q R S T U V W X |
32 31 18 19 10 13 1F 14 16 2F 11 2D |
Y Z 0 1 2 3 4 5 6 7 8 9 |
15 2C 81 78 79 7A 7B 7C 7D 7E 7F 80 |
<F1> <F2> <F3> <F4> <F5> <F6> <F7> <F8> <F9> <F10> <F11> <F12> |
68 69 6A 6B 6C 6D 6E 6F 70 71 8B 8C |
Рассмотренные выше функции DOS, предназначенные для посимвольного ввода данных с клавиатуры, позволяют работать и с расширенными кодами ASCII.Однако программа при этом должна вызывать функциюDOSдважды. Первый вызов всегда возвращает младший байт и, если он равен нулю, то необходимо повторить вызов этой же функции для вывода старшего байта. Это и будет информационный байт расширенного кодаASCII,который можно использовать для управления программой.
Обратим здесь внимание на важный момент!Расширенный кодASCIIможно считать, если программа будет настроена на проверку нулевого значения младшего байта для каждого нажатия клавиши. Пример использования функциональных клавиш для управления программой показан в листинге 5.1.
Листинг 5.1Фрагмент программы, демонстрирующий выполнение альтернативных действий на основе анализа расширенных кодовASCII
DATASEG
mes1DB13,10,'Сообщение <F1> $'
mes2DB13,10,'Сообщение <Shift/F1> $'
mes3 DB 13,10,'Сообщение <Alt/A> $'
..................
CODESEG
..................
;Ожидаем нажатия клавиши
again:movah,08h;Функция ввода одиночного символа без эха
int21h;Первый вызовDOS
cmpal,0 ;РасширенныйASCIIкод?
Jneagain;Нет
movah,08h;Да, введём старший байт
int21h;Повторный вызовDOS
cmpal,3B;НажатаF1?
JeF1 ;Да
cmpal,54h;Нажата <Shift/F1>?
Je Shift_F1 ;Да
cmp al,1Eh ;Нажата <Alt/A>?
JeAlt_A;Да
jmpagain;Нажато незапланированное
F1:;Вывод сообщенияmes1
................
jmpExit
Shift_F1:;Вывод сообщенияmes2
.................
jmpExit
Alt_A:;Вывод сообщенияmes3
.................
Exit:;Завершение программы