Вывод символов на экран

Лабораторная работа №2

Арифметические команды и команды переходов

Получение символов с клавиатуры

Ввод информации с клавиатуры - один из основных способов взаимодействия с компьютером IBM PC. DOS обеспечивает ряд функций, с помощью которых программа на ассемблере может обрабатывать нажатия клавиш.

Возможно, одним из наиболее простых способов получения символов клавиш является функция "Ввод с клавиатуры", то есть функция DOS номер 1. Функции DOS вызываются путем помещения номера функции в регистр AH и выполнения затем инструкции INT 21h. (Действительная работа инструкции INT несколько более сложна, но сейчас вам требуется только знать, что каждый раз при вызове функции DOS вы должны выполнять инструкцию INT 21h.) Следующий набранный на клавиатуре символ возвращается в регистре AL.

Например, когда выполняется код:

mov ah,1

int 21h

операционная система DOS помещает следующий набранный на клавиатуре символ в регистр AL. Заметим, что если клавиша не нажата, DOS будет ждать, когда она будет нажата; поэтому для выполнения данной функции может потребоваться неопределенное время.

Вывод символов на экран

Если нажатия клавиш означают взаимодействие пользователя с программным обеспечением, то экран является дополнением. IBM PC оснащаются дисплеями различных типов, начиная от цветного текстового до графического с высоким разрешением, но в данный момент мы рассмотрим только вывод символов.

Функция DOS с номером 2 обеспечивает наиболее непосредственный путь вывода символа на экран. Для этого нужно просто поместить 2 в регистр AH и выводимый символ в регистр DL, а затем вызвать DOS с помощью INT 21h. Следующий код отображает каждый введенный символ на экране:

mov ah,1

int 21h ; получить код следующей нажатой клавиши

mov ah,2

mov dl,al ; переместить считанный символ из AL в DL

int 21h ; вывести его на экран

Есть еще одно замечание, которое нужно сделать относительно клавиатуры, экрана и файлового ввода и вывода на языке Ассемблера. Те из вас, кто пользовался функциями scanf и printf в языке Си или функциями Readln n Writeln в Паскале, возможно с удивлением узнают, что в DOS не предусмотрено форматного ввода и вывода. DOS выполняет только посимвольный или построчный ввод-вывод. В Си для печати целой переменной вам требуется сделать следующее:

printf("\\d\n",i);

Си автоматически преобразует целое значение, которое хранится в 16-битовой ячейке памяти, в строку символов кода ASCII и печатает символы. В Ассемблере ваша программа должна явно преобразовывать переменные в строки символов, перед тем, как вывести их на экран. Аналогично, DOS знает только, как считывать символы и строки символов с клавиатуры, поэтому вам придется писать программы, преобразующие вводимые пользователем строки и символы в другие данные.