Пример выполнения работы

Функция 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. Ввести с клавиатуры строку, состоящую из нескольких слов. Вывести каждое слово на экран в отдельной строке лесенкой, т.е. выдать каждое слово в столбик, с фиксированным сдвигом относительно начала предыдущего.

Ввести с клавиатуры строку. Преобразовать все буквы в числа. Построить криптограмму (вместо букв вывести на экран соответствующие им числа).