Пример выполнения работы
Функция 0Bh
Выполняет опрос состояния буфера клавиатуры.
· Вызов:
ah = 0Bh
· Возвращаемое значение:
· аl = 00h, если нет символа в буфере клавиатуры;
· al = ffh, если есть символ в буфере клавиатуры.
· Примечание. Устанавливает значение AL в зависимости от наличия символов в буфере клавиатуры. Часто используются в задачах, действующих при нажатии определенных клавиш. Комбинация клавиш Ctrl/ (или Ctrl/Break) прекращает выполнение программы пользователя.
Ввести строку с клавиатуры, посчитать, сколько и каких десятичных цифр имеется во введенной строке, посчитанные значения вывести на терминал.
Текст программы:
.model small
· .data
COUNT db 10 dup (0) ; счетчик количества цифр
CIFR db ‘0123456789ABCDEF’ ; таблица преобразования цифр
IN_STR db 80, ?, 82 dup (?) ; буфер ввода
OUT_STR db 0Dh, 0Ah, ?,’-‘,?, ?,’$’ ; буфер вывода
· .code
START: mov ax, @data
mov ds, ax ; Загрузить сегментный адрес данных
; Ввод строки
· lea dx, IN_STR
· mov ah, 0ah
· int 21h
; Обработка
xor ah, ah ; обнуление старшего байта AX
lea bx, IN_STR+2 ; адрес начала введённой строки
xor cx, cx
mov cl, IN_STR+1 ; количество введенных символов
ВВ: mov al, [BX] ; очередной символ строки
cmp al,’0’ ; код символа меньше чем код нуля?
jb NC ; да, не цифра
cmp al, ‘9’ ; код символа больше чем код девяти
ja NC ; да, не цифра
; символ - десятичная цифра
sub al, ‘0’ ; преобразуем ASCII код в число
mov si, ax ; индекс в массиве счетчиков COUNT
inc COUNT[si] ; увеличиваем счетчик цифр
NC: inc bx ; получить очередной символ строки
loop BB
· ; Вывод результатов
· mov cx, 10
lea bx, CIFR ; адрес таблицы преобразования цифр в ASCII
xor si, si ; номер выводимой цифры
OUT: mov al, ‘0’
add ax, si ; ASCII код очередной цифры с номером в si
mov OUT_STR+2, al ; в буфер вывода
mov dl, COUNT[si] ; читать количество цифр с номером в si
· mov al, dl
push cx ;временное сохранение cx
mov cl, 4 ; сдвиг на четыре
shr al, cl ; выделить старшую цифру
xlat ; ASCII старшей цифры в al
pop cx ; восстановление cx
mov OUT_STR+4, al ; в буфер вывода
mov al, dl ; восстановить количество цифр в al
and al,00001111b ; выделить младшую цифру
xlat ; ASCII младшей цифры в al
· mov OUT_STR+5, al ; в буфер вывода
lea dx, OUT_STR ; подготовка к выводу строки
mov ah, 09h ; номер функции
int 21h ; вывод строки
inc si ; Счетчик очередной цифры
loop OUT
QUIT: mov ax, 4C00h ; Код завершения 0
int 21h ; Выход в DOS
· end START
Варианты заданий
1. Ввести с клавиатуры строку. Сжать строку, т.е. удалить пробелы и табуляции. Вывести результаты на экран.
2. Ввести с клавиатуры строку. Преобразовать все малые буквы в большие. Вывести результаты на экран.
3. Ввести с клавиатуры строку. Посчитать количество слов в строке. Определить, что является разделителем слов. Вывести результаты на экран.
4. Ввести с клавиатуры строку. Ввести с клавиатуры коротенькую строку - шаблон. Найти шаблон во введенной строке. Вывести на экран “ДА”, если шаблон есть и “НЕТ”, если нет.
5. Ввести с клавиатуры две строки. Сравнить их. Вывести на экран “ДА”, если они равны и “НЕТ”, если нет.
6. Ввести с клавиатуры строку. Если она длиннее некоторой заданной величины, то обрезать, если короче растянуть, вставив нужное число пробелов между словами. Вывести результаты на экран.
7. Ввести с клавиатуры строку, состоящую из нескольких слов. Вывести каждое слово на экран в отдельной строке, т.е. выдать слова в столбик.
8. Ввести с клавиатуры строку. Переставить в ней символы, поменяв местами первый символ с последним, второй с предпоследним и т.д. Вывести результаты на экран.
9. Ввести с клавиатуры две строки. Сравнить их. Вывести на экран номер начала второй строки в первой.
10. Ввести с клавиатуры строку, содержащую несколько точек. Преобразовать строку, чтобы после каждой точки был пробел, и следующая буква после точки были заглавная. Вывести результаты на экран.
11. Ввести с клавиатуры строку, содержащую несколько слов, разделенных пробелом. Переставить в ней слова, поменяв местами первое слово с последним, второе с предпоследним и т.д. Вывести результаты на экран.
12. Ввести с клавиатуры строку, состоящую из нескольких слов. Вывести каждое слово на экран в отдельной строке лесенкой, т.е. выдать каждое слово в столбик, с фиксированным сдвигом относительно начала предыдущего.
Ввести с клавиатуры строку. Преобразовать все буквы в числа. Построить криптограмму (вместо букв вывести на экран соответствующие им числа).