С этого шага мы начнем рассматривать организацию основных операций ввода/вывода информации.
Эта операция требует определения текстового сообщения в области данных, установки в регистре AH значения 09 и вызова DOS-прерывания INT 21H. В процессе выполнения операции конец сообщения определяется по ограничителю "$":
NAMPRMP DB 'Студент - ','$' . . . MOV AH,09 ;Запрос вывода на экран. LEA DX,NAMPRMP ;Загрузка адреса сообщения. INT 21H ;Вызов DOS-прерывания.
Знак ограничителя '$' можно кодировать непосредственно после символьной строки, как показано в примере, внутри строки ('Студент - $') или в следующем операторе (DB '$'). Используя данную операцию, нельзя вывести на экран символ доллара '$'. Кроме того, если знак доллара будет отсутствовать в конце строки, то на экран будут выводиться все последующие символы, пока знак '$' не встретится в памяти.
Команда LEA загружает адрес области NAMPRMP в регистр DX для передачи в DOS адреса выводимой информации. Адрес поля NAMPRMP, загружаемый в DX по команде LEA, является относительным, поэтому для вычисления абсолютного адреса данных DOS складывает значения регистров DS и DX.
Для размещения определенного значения в байтах памяти имеется псевдокоманда (директива) DB. Например, псевдокоманда:
NAMPRMP DB 'Студент - ','$'
дает Ассемблеру задание сохранить заданную строку символов в памяти компьютера, причем для представления каждого символа выделить один байт. Кроме того, встречаются ситуации, когда программе требуется место в памяти для сохранения данных в процессе исполнения. Инструкция:
A DB ?
сообщает Ассемблеру о необходимости выделить один байт памяти, не изменяя его содержимое. Обратиться к этому байту можно, используя имя A.
Может потребоваться выделить большее количество байтов, например, чтобы оставить область памяти для массива. Это можно сделать так:
B DB 25 DUP(?) .
Этой инструкцией выделяется 25 байт памяти. Ключевое слово DUP в этой псевдокоманде означает "повторить" (Duplicate). Число 25 указывает, сколько раз Ассемблер повторит определение байта в памяти. Значение или значения в скобках Ассемблер использует для инициализации этой области памяти. В данном случае это значение неизвестно. Для инициализации области с одним и тем же значением выражение, например:
AA DB 17 DUP(31H)
создает 17 байт со значением "1" (код символа "1" равен 31H) каждый.
При необходимости выделить слово памяти вместо директивы DB используется DW. Для выделения места под двойное слово применяется DD.
На следующем шаге мы рассмотрим один из способов ввода данных с клавиатуры.