ПРИЛОЖЕНИЕ А
А.1 Описание модуля io.Asm
Рассматриваемый модуль приведен в книге В. Н. Пильщикова «Ассемблер» [7].
Ввод с клавиатуры
Ввод данных с клавиатуры реализован с использованием промежуточного буфера ввода. Допускается редактирование вводимого текста: при нажатии клавиши Backspace уничтожается последний набранный символ, а при нажатии клавиши Esc уничтожается весь набранный текст.
Команды ввода не выдают на экран никакого приглашения к вводу, поэтому сама программа должна выдавать символы приглашения (например, символ >).
***************************************************************
Ввод числа: inint ор
Допустимый тип операнда op: слово из регистра или из памяти.
По команде можно ввести число как со знаком, так и без знака. Вводимое число должно быть записано в десятичной системе. Если перед числом имеются пробелы, то они "проглатываются" командой ININT.
Если число набрано без знака или со знаком "плюс", то оно вводится как число без знака и может иметь величину от 0 до 2 16-1.
Если перед числом указан знак "минус", то оно вводится как отрицательное число и должно иметь величину от -2 15 до -1.
Концом числа считается любой символ, отличный от цифры.
Если величина числа находится вне указанных границ или оно задано неправильно, то фиксируется ошибка, и программа прекращает свою работу.
Так как введенное число всегда записывается в регистр или ячейку размером в слово, то, например, команда ININT АХ допустима, а команда ININT АН - нет.
***************************************************************
Очистка буфера ввода: flush
Это аналог процедуры readln языка Паскаль: все, что до этого момента было набрано на клавиатуре, уничтожается.
***************************************************************
Вывод на экран
Вывод на экран осуществляется немедленно, без каких-либо промежуточных буферов. Очередной выводимый символ размещается в той позиции экрана, где сейчас находится курсор, который по мере вывода смещается.
***************************************************************
Переход на новую строку: newline
Аналог процедуры writeln языка Паскаль: по этой команде курсор перемещается на начало следующей строки экрана.
***************************************************************
Вывод числа со знаком: outint opl [,ор2]
Вывод числа без знака: OUTWORD opl [,op2]
Допустимые типы операндов op1: слово из регистра или из памяти, op2: байт из регистра, памяти или непосредственный операнд
Обе эти команды выводят в десятичном виде число, заданное первым операндом и имеющее размер слова, только команда OUTINT трактует его как знаковое число, а команда OUTWORD - как беззнаковое.
OUTINT 0FFFFh ; вывод -1
OUTWORD 0FFFFh ; вывод 65535
Второй операнд, если есть, всегда трактуется как число без знака и задает ширину поля вывода - число позиций на экране, которые отводятся для вывода числа. Если ширина поля вывода больше, чем надо, то число прижимается к правому краю этого поля, а перед числом ставятся пробелы. Если же ширина поля меньше или вообще не указана (нет ор2), тогда никакие пробелы не выводятся, а выводится только число, причем целиком, без каких-либо усечений.