Для создания данной программы будем использовать две функции DOS: функцию вывода строки на экран и функцию ввода с клавиатуры.
- поместить номер функции DOS в регистр AH (если есть подфункции, то
номер подфункции обычно помещается в
AL)
- загрузить остальные регистры согласно описанию функции
- подготовить необходимые буферы, строки ASCII и управляющие блоки
- вызвать прерывание INT 21H
- проверить индикатор ошибки, возвращенный DOS (флаг переноса)
выход:
DS:DX
= адрес строки, заканчивающейся символом ‘$’
выход: нет
Строка, исключая завершающий её символ ‘$’, посылается на
стандартный вывод.
Обычно, чтобы перейти на новую строку, включают в текст пару
CR/LF (ASCII 0Dh и 0Ah).
Вызвать прерывание DOS Int 20h
Подготовка данных
(строк) для вывода на экран
Запускаем Debug и записываем в память строки. Запоминаем адреса начала
строк, для последующего обращения к ним из программы:

рис.1
На рис.1 видно, что сначала мы ввели в память два байта 0D и 0A в адреса 13E2:0200 и 13E2:0201 соответственно, а далее с адреса 13E2:0202 расположили первую строку программы "Вариант №4…". Последний байт этой строки символ $, код которого 24h, расположился по адресу 13E2:0243. Поэтому продолжаем ввод оставшихся строк с адреса 13E2:0244. После введения каждой строки командой "damp"= d просматриваем дамп памяти для определения адреса ввода последующей строки.
Листинг программы
mov dx, 200 `в регистр dx вносим адрес выводимой строки "Вариант
№4……"
int
21 `вызываем прерывание DOS для выполнения функции вывода строки на экран
mov dx, 244 `в регистр dx вносим
адрес строки "Введите число Х="
int
21 `вызываем прерывание DOS для выполнения функции вывода строки на экран
mov ax, 100 `подготавливаем функцию ввода символа с
клавиатуры, AH = 01h
int
21 `вызываем прерывание DOS для выполнения функции
mov cx, ax `сохраним
(скопируем) значение регистра AX (
mov ax, 900 `опять готовим функцию вывода на экран, AH = 09h
mov dx, 257 `адрес строки "Введите число Y ="
int 21
`вызываем прерывание DOS для
выполнения функции вывода строки на экран
mov ax, 100 `готовим функцию ввода символа, AH = 01h
int
21 `выполняем эту функцию:
программа ожидает ввода символа с клавиатуры
mov bx, ax `копируем
значение регистра ax (
mov ax, 900 `установим заранее функцию вывода на экран,
AH = 09h
cmp cx, bx
`сравниваем значения регистров CX и BX, в которые мы сохранили числа X и Y
JG ds:133 `если
число Х (т.е.его 16–ричный код) больше числа Y (...), то переходим к адресу 133, где
запрограммирован вывод соответствующей строки на экран
JL ds:13A `если
число Х (т.е.его 16–ричный код) меньше числа Y (...), то переходим к адресу 13A, где запрограммирован вывод соответствующей строки на
экран
mov dx, 288 `в dx вносим
адрес строки о равенстве чисел X и Y (переходы jg и jl не совершились)
int
21 `прерывание DOS, вывод строки на экран
int
20 `завершение программы
mov dx, 26a `в dx
вносим адрес строки "X >
Y" (сюда перейдёт по команде jg)
int
21 `прерывание DOS, вывод строки на экран
int
20 `завершение программы
mov dx, 279 `в dx вносим
адрес строки "X < Y" (сюда
перейдёт по команде jl)
int
21 `прерывание DOS, вывод строки на экран
int
20 `завершение программы

Далее необходимо командой "name"– n ввести имя программы (придумать) и командой "write"– w произвести запись программы в файл:

