GET_KEY MOV AH,01Н ; считать символ
INT 21H CMP AL, ’Д’; считан Д? JE YES; если да, то перейти к YES CMP AL, ’Н’; считан Н? JE NO; если да, то перейти к YES JNE GET_KEY; иначе возврат на чтение символа. В приведенном фрагменте распознаются только прописные буквы Д и Н, если Вы хотите, чтобы распознавались и строчные буквы, добавьте в программу соответствующие команды! Во многих приложениях, требуется, чтобы пользователь ввел строку с информацией, например, свое полное имя (ФИО). Для этой цели служит функция А прерывания 21Н. Чтобы воспользоваться этой функцией, в программе пользователя требуется зарезервировать в сегменте данных место для вводимой строки (в таблице это называется буфер строки). Количество выделяемых байтов должно быть на 2 больше максимального размера вводимой строки. Причем первый байт буфера должен задавать эту самую максимальную длину (фактически он будет содержать значение количества выделенных байтов памяти минус 2). Например, чтобы предусмотреть в программе ввод пользовательской строки из 50 символов, в сегменте данных нужно описать: STRING DB 50, 51 DUP (?); первый байт в области – константа 50, за ней следуют незаполненные 51 байт для сообщения. Чтение строки выполняется командами: LEA DX, STRING; указатель на буфер поместить в DS: DX MOV AH, 0AH; вызвать функцию А INT 21H; прочитать строку. Функция А помещает количество фактически введенных символов во второй байт буфера STRING и не изменяет указатель DS: DX. Т.е. после выполнения команды INT первый информационный символ введенной строки находится по адресу (DX)+2. Вряд ли хорошая пользовательская программа может обойтись без сообщений из программы. Это могут быть либо приглашения к вводу информации, либо сообщения о ходе выполнения программы. Такой сервис в программах на Ассемблере представляет функция 9 для работы с дисплеем. Приведем пример фрагмента программы для выдачи приглашения ‘Введите ФИО’. Для функции 9 необходимо, чтобы текст сообщения заканчивался символом $, поэтому в сегменте данных опишем: MESS1 DB ‘Введите ФИО: $’. В командном сегментном коде предусмотрим команды вызова функции 9: LEA DX, MESS1 MOV AH, 09Н INT 21H. Имейте ввиду, что в этом случае курсор устанавливается в позицию $, т.е. в то место строки, где мы хотим видеть фамилию. Чтобы после выдачи приглашения курсор установился в начале следующей строки, необходимо в текст выдаваемого приглашения перед символом доллара ввести символы возврата каретки и перехода на следующую строку, как это демонстрируется ниже: MESS1 DB ‘Введите ФИО’, 0DH, 0AH, ’$’.
|