Иллюстрированный самоучитель по Assembler

Циклы и условные переходы

Между прочим, при вводе с клавиатуры команд DOS система всегда выполняет эту операцию, поэтому и команды, и ключи, и имена файлов можно вводить как прописными, так и строчными буквами – DOS во всех случаях преобразует все буквы в прописные.

code segment
assume cs:code,ds:data
main proc
mov AX,data; Инициализация
move DS,AX; Регистр DS
;Выведем служебное сообщение
mov AH,09h; Функция вывода
mov DX,offset msg; Адрес сообщения
int 21h
;Поставим запрос к DOS на ввод строки
mov AH,3Fh; Функция ввода
mov BX,0; Дескриптор клавиатуры
mov CX,80; Ввод максимум 80 байт
mov DX, offset buf;Адрес буфера ввода
int 21h
mov actlen,AX; Фактически введено
;Превратим строчные русские буквы в прописные
mov CX,actlen; Длина введенной строки
mov SI,0; Указатель в буфере
filter: mov AL,buf[SI]; Возьмем символ
cmp AL,'a'; Меньше 'a'?
jb noletter; Да, не преобразовывать
cmp AL,'я'; Больше 'я'?
ja noletter; Да, не преобразовывать
cmp AL,'п'; Больше 'п'?
ja more; Да, на дальнейшую проверку
sub AL,20h; 'a'..'п'. Преобразуем в прописную
jmp store; На сохранение в буфере
more: cmp AL,'p'; Меньше 'p1' (псевдографика)?
jb noletter; >'п',<'p'. Не изменять
sub AL,50h; 'p'…'я'. Преобразуем в прописную
store: mov buf[SI],AL; Отправим назад в buf
noletter: inc SI; Сместим указатель
loop filter; Цикл по всем символам
; Выведем результат преобразования на экран для контроля
mov AX,40h; Функция вывода
mov BX,1; Дескриптор экрана
mov CX,actlen; Длина сообщения
mov DX,offset buf; Адрес сообщения
int 21h
mov AH,01; Остановим программу
int 21h; в ожидании нажатия клавиши
;Завершим программу
mov AX,4C00h
int 21h
main endp
code ends
data segment
msg db "Вводите!$"
buf db 80 dup (' '); Буфер ввода
actlen dw 0
data ends
stk segment stack
dw 128 dup(')
stk ends
end main

В начале программы на экран выводится служебное сообщение "Вводите!", которое служит запросом программы, адресованным пользователю. Далее с помощью функции DOS 3Fh выполняется ввод строки текста с клавиатуры. Функция 3Fh может вводить данные из разных устройств – файлов, последовательного порта, клавиатуры. Различные устройства идентифицируются их дескрипторами.

При работе с файлами дескриптор каждого файла создается системой в процессе операции открытия или создания этого файла, а для стандартных устройств – клавиатуры, экрана, принтера и последовательного порта действуют дескрипторы, закрепляемые за этими устройствами при загрузке системы. Для ввода с клавиатуры используется дескриптор 0, для вывода на экран дескриптор 1.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.