Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 170

Unknown Author

Особым образом осуществляется вывод символов с кодами 7, 8, 9, 10 (OAh) и 13 (ODh). Символ с кодом 7 (bell, звонок) на экране не высвечивается (и курсор не сдвигается), а вызывает звуковой сигнал. Символ с кодом 8 (backspace, шаг назад) возвращает курсор на одну позицию влево, если только он не был в самой левой позиции строки. Символ с кодом 9 (tab, табуляция) смещает курсор вправо на ближайшую позицию, кратную 8. Символ с кодом 10 (line feed, перевод строки) перемещает курсор в следующую строку экрана, оставляя его в той же колонке. Символ с кодом 13 (carrige return, возврат каретки) устанавливает курсор на начало текущей строки; вывод подряд символов с кодами 13 и 10 означает перевод курсора на начало следующей строки.

Для вывода на экран строки (последовательности символов) можно, конечно, использовать функцию 02, однако сделать это можно и за один прием с помощью функции 09 прерывания 21h:

DS:DX :* начальный адрес строки MOV АН,9 INT 21h

Перед обращением к этой функции в регистр DS должен быть помещен номер того сегмента памяти, в котором находится выводимая строка, а в регистр DX -смещение строки внутри этого сегмента. При этом в конце строки должен находиться символ ’$’ (код 24h), который служит признаком конца строки и сам не выводится.

Среди функций DOS нет такой, которая выводит числа. Такую операцию, если надо, приходится реализовать на основе рассмотренных функций.

Ввод е клавиатуры

При нажатии (в любой момент) клавиши на клавиатуре ее код (соответствующий символ) заносится операционной системой в специальный буфер ввода, откуда эти коды будут затем считываться функциями ввода. Тем самым возможен ,,дocpoчный,, ввод: символы Moiyr быть набраны еще до того, как программа начнет ввод. Размер этого буфера ОС - 15 позиций, поэтому если до выполнения какой-нибудь функции ввода уже было нажато 15 клавиш, то на нажатие 1б-й и последующих клавиш ОС не реагирует (кроме выдачи звукового сигнала). По мере считывания из этого буфера коды сдвигаются в его начало и коды новых нажатых клавиш дописываются в конец буфера; функции ввода всегда считывают символы из начата буфера. Если вызвана функция ввода, а в буфере нет никаких символов, то ОС ожидает нажатия клавиши.

Если программа не желает вводить символы, которые были набраны досрочно, то она должна очистить буфер ввода ОС, для чего следует выполнить функцию OCh (12) прерывания 21h при нулевом регистре AL:

MOV AL,0 MOV АН,OCh INT 21h

Из всех функций DOS, реализующих ввод с клавиатуры, мы рассмотрим только одну - функцию OAh (10) прерывания 21h, с помощью которой можно ввести сразу несколько символов (строку) и которая допускает редактирование набираемого текста:

DS:DX :* адрес буфера для записи введенной строки MOV АН,0Ah INT 21h

Эта функция вводит символы до тех пор, пока не будет нажата клавиша Enter, и записывает их в указанный буфер. Вводимые символы высвечиваются на экране (ввод с эхом). Пока не нажата клавиша Enter, набираемый текст можно редактировать с помощью следующих клавиш: