Циклы и условные переходы
Между прочим, при вводе с клавиатуры команд 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.