28. Средства ввода-вывода символьной информации

Int 21h команда, с помощью которой программа, написанная на языка Ассемблера запрашивает сервис DOS для выполнения определённых действий типа ввода данных с клавиатуры или их вывод на экран. Программа, запрашивающая сервис DOS, должна подготовить всю необходимую информацию в регистрах и управляющих блоках, указать в регистре AH номер желаемой функции DOS и затем вызвать прерывание INT 21H.

Номера некоторых функций прерывания INT 21H:
АН = 01: Ввод с клавиатуры с эхоотображением. Данная функция возвращает значение в регистре AL, Если содержимое AL не равно нулю, то оно представляет собой стандартный ASCII-символ, например букву или цифру.
АН = 02: Вывод символа. Для ввода символа на экран в текущую позицию курсора необходимо поместить код данного символа в регистр DL.
АН = 06: Ввод/вывод данных. Может использоваться как для ввода, так и для вывода. Для вывода занесите в DL выводимый символ (но не FFH!) и вызовите прерывание 21Н. Для ввода в DL занесите FFH, выполните прерывание 21Н.
АН = 09: Вывод строки символов Выводимая строка должна заканчиваться знаком доллара $. Адрес начала строки должен быть помещен в DX. Знак доллара не выводится.
AH = 0A: Ввод данных в буфер: Определяется максимальная длина вводимого текста. Это необходимо для предупреждения пользователя звуковым сигналом, если набран слишком длинный текст; символы считываются со стандартного ввода вплоть до CR (ASCII 0dH) или до достижения длины MAX-1. если достигнут MAX-1, включается консольный звонок для каждого очередного символа, пока не будет введен возврат каретки CR (нажатие Enter).. Во второй байт буфера команда возвращает действительную длину введенного текста в байтах. Адрес буфера помещается в региcтр DX.

Пример:Вывод строки на экран.

.data
	msg DB ‘Hello world$’, 10, 13 ;объявляем строку, которую будем выводить (она обязательно заканчивается знаком "$", иначе на экран выведется наша строка и еще куча всякой ерунды)
	…
.code
	…
	lea dx, msg ;загружаем в dx адрес нашей строки
	mov ah, 09h  ;загружаем в ah, номер нужной нам функции
	int 21h ;вызываем прерывание
	…
code ends
…
17.07.2015