Фильтрация ввода
Практически весь символьный ввод в программах подлежит фильтрации. Фильтрация ввода состоит в том, что ожидаемые программой символы принимаются для обработки программой, а остальные отвергаются (игнорируются). При фильтрации применяются команды сравнения и условных переходов (обычно по сравнению беззнаковых операндов).
Примеры:
Ввод символа и фильтрация:
mov ah,01h
int 21h
cmp al,1Bh ; нажата клавиша «ESC»?
je exit ; если да, то выход
… ; продолжение, если не «ESC»
Предыдущий фрагмент имеет один недостаток: при нажатии клавиши «ESC» на консоль (экран) выводится “эхо”, в данном случае нежелательное. Лучше использовать ввод без “эха”:
mov ah,08h
int 21h
cmp al,1Bh ; нажата клавиша «ESC»?
je exit ; если да, то выход
mov dl,al ; если не «ESC»,
mov ah,02h ; то вывод символа на консоль
int 21h
… ; продолжение работы программы
Пример программы
Ниже приведен пример программы на языке Ассемблер, выполняющей фильтрацию ввода (пропускаются только латинские прописные буквы). Для ввода использована функция 08h DOS, т.к. прежде, чем выводить символ, необходимо выполнить фильтрацию. По клавише ESC предусмотрен выход из программы (при этом дополнительно выводится символ «!»). Сочетание Ctrl-C также прервет программу, но это будет аварийное окончание. После фильтрации допустимый символ выводится на экран функцией 02h DOS.
name filter1
;
LAT CAPs only
.model small
ESC_ equ 1Bh
.code ;--------------------- start: mov ax,@data mov ds,ax next: mov ah,08h ;
no echo int 21h cmp al,ESC_ je exit ;
sym = ESC cmp al,'A' jb next ;
sym < 'A' cmp al,'Z' ja next ;
sym > 'Z' mov dl,al mov ah,02h ;
sym to con int 21h jmp next exit: mov dl,’!’ ;
add last symbol ‘!’ mov ah,02h int 21h .exit
;---------------------
end start
Задание 1. Фильтрация ввода. Выводить на экран разрешенные символы. Если вводится сочетание клавиш или управляющие коды, то выводить текст, например: «F1», «Alt-B», «Ctrl-C», «ESC», «PgUp». На запрещенные символы предусмотреть определенную реакцию (текст, звук и т.п.).
Задание 2. Преобразовать вводимые символы и вывести на экран.
Варианты заданий
№/№ вар.зад. |
Ввод символов |
Примечания |
1.1 |
0..9, +,-,*,/ |
Фильтрация |
1.2 |
Буквы строчные и прописные ® Только строчные |
Преобразование |
2.1 |
a..z, ?,/,<,> |
Фильтрация |
2.2 |
Буквы строчные и прописные ® Только прописные |
Преобразование |
3.1 |
A..Z, (,),:,; |
Фильтрация |
3.2 |
Буквы строчные и прописные ® Инвертировать регистр |
Преобразование |
4.1 |
Ctrl-F1..Ctrl-F10 |
Фильтрация |
4.2 |
qwe asd zxc ® Псевдографика одиночная |
Преобразование |
5.1 |
Shift-F1..Shift-F10 |
Фильтрация |
5.2 |
PTV QRS ASD ® Псевдографика двойная |
Преобразование |
6.1 |
F1..F10 |
Фильтрация |
6.2 |
Alt-1, Alt-2, Alt-3, Alt-4 ® Псевдографика фоновая |
Преобразование |
7.1 |
Ctrl-F1..Ctrl-F10 |
Фильтрация |
7.2 |
0,1,2,3,4,5,6,7,8,9 ® Цифры прописью |
Преобразование |
8.1 |
Alt-1..Alt-9 |
Фильтрация |
8.2 |
н, о, д, т, ч, п, ш, с, в, е ® 0,1,2,3,4,5,6,7,8,9 |
Преобразование |
9.1 |
Shift-F1..Shift-F10 |
Фильтрация |
9.2 |
Русские буквы ® Латинские эквиваленты |
Преобразование |
10.1 |
Alt-F1..Alt-F10 |
Фильтрация |
10.2 |
Латинские буквы ® Русские эквиваленты |
Преобразование |
11.1 |
TAB, ESC, SPACE, F11, F12 |
Фильтрация |
11.2 |
Клавиши управления курсором ® Соответств. названия |
Преобразование |
12.1 |
a..z, A..Z |
Фильтрация |
12.2 |
Буквы строчные и прописные ® Только строчные |
Преобразование |
13.1 |
F-1..F-10 |
Фильтрация |
13.2 |
Буквы строчные и прописные ® Только прописные |
Преобразование |
14.1 |
+,-,*,/,?,/,<,>,(,), : , ; , ! , ? |
Фильтрация |
14.2 |
F1, F2, F3, F4 ® Псевдографика фоновая |
Преобразование |
15.1 |
Up,down,left,right,PrUp,PgDn |
Фильтрация |
15.2 |
qwe asd zxc ® Псевдографика одиночная |
Преобразование |
16.1 |
A..Z |
Фильтрация |
16.2 |
Клавиши управления курсором ® Соответств. названия |
Преобразование |
17.1 |
a..z |
Фильтрация |
17.2 |
F1, F2, F3, F4 ® Псевдографика фоновая |
Преобразование |
18.1 |
TAB, ESC, SPACE, F11, F12 |
Фильтрация |
18.2 |
0,1,2,3,4,5,6,7,8,9 ® Цифры прописью |
Преобразование |
19.1 |
+,-,*,/,?,/,<,>,(,), : , ; , ! , ? |
Фильтрация |
19.2 |
н, о, д, т, ч, п, ш, с, в, е ® 0,1,2,3,4,5,6,7,8,9 |
Преобразование |
20.1 |
F1..F10 |
Фильтрация |
20.2 |
Русские буквы прописные ® Латинские эквиваленты |
Преобразование |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Примечание. Можно добавить произвольные данные по своему усмотрению.
