- •О десский национальный морской университет
- •7.080401 "Информационные управляющие системы и технологии",
- •7.080402 "Информационные технологии проектирования"
- •Введение
- •Лабораторная работа №1 структура ехе-программы на ассемблере. Подготовка к выполнению Теоретические сведения
- •Задание
- •Лабораторная работа №2 использование служебных подпрограмм. Циклы. Формирование и вывод на экран строки ascii- символов Теоретические сведения
- •Inc al ; увеличиваем al (код символа) на 1
- •Задание
- •Лабораторная работа №3 управление курсором при выводе. Вложенные циклы. Формирование и вывод на экран таблицы символов ascii Теоретические сведения
- •Задание
- •Лабораторная работа №4 посимвольный ввод с клавиатуры. Анализ нажатия функциональных клавиш и комбинаций Теоретические сведения
- •Задание
- •Лабораторная работа №5 ввод с клавиатуры и обработка символьных строк (пароль) Теоретические сведения
- •Задание
- •Лабораторная работа №6 процедуры. Табличная трансляция. Перевод двоичных данных в символьную форму Теоретические сведения
- •Задание
- •Лабораторная работа №7 работа с файлами Теоретические сведения
- •Задание
Лабораторная работа №3 управление курсором при выводе. Вложенные циклы. Формирование и вывод на экран таблицы символов ascii Теоретические сведения
Функции DOS поддерживают обработку управляющих кодов. Это значит, что при выводе символов с этими кодами на экран вместо непосредственно вывода символов производятся определенные управляющие действия:
07h (BEL) — звуковой сигнал (со стандартного звукового устройства);
08h (BS) — BackSpace (курсор сдвигается на 1 позицию влево);
09h (HT) — горизонтальная табуляция (курсор сдвигается к ближайшей правой границе табуляции);
10 = 0Ah (LF) — перевод строки (курсор сдвигается на строку вниз, оставаясь в той же позиции);
13 = 0Dh (CR) — возврат каретки (курсор сдвигается в начало текущей строки).
Управляющие коды дают возможность выводить на экран форматированный текст в режиме телетайпа. Текстовый экран при этом обычно состоит из 25 строк по 80 символов. Строки нумеруются с 1-й (верхняя) по 25-ю (нижняя). Если курсор находится в последней позиции строки, вывод символа приводит к автоматическому переводу курсора в начало новой строки. Если курсор находится в предпоследней (25-й) строке, то его перевод на следующую строку приводит к сдвигу изображения на строку вверх.
При перенаправлении вывода интерпретация управляющих кодов может меняться.
Вложенные циклы. Нередко при программировании (в частности, при обработке двумерных массивов) приходится повторять выполнение некоторого цикла во внешнем цикле. Внутренний цикл при этом называется вложенным. Внешний цикл организуется в соответствии с теми же принципами, что и циклы вообще. Однако необходимо следить за тем, чтобы не нарушалось изменение переменных вложенного и внешнего циклов. Один из вариантов: использование двух различных ячеек в качестве переменных циклов, например:
mov al, 0 ; инициализация переменной внешнего цикла
m
etka1: ;
начало внешнего цикла
mov ah, 0 ; инициализация переменной внутреннего цикла
m
etka2: ;
начало внутреннего цикла
inc ah ; изменение AH
cmp ah, N
jb metka2 ; конец внутреннего цикла
inc al ; изменение AL
cmp al, M
jb metka1 ; конец внешнего цикла
В случае же использования одной ячейки для переменных обоих циклов (как, например, при использовании команды LOOP для обоих циклов) необходимо организовать сохранение и восстановление актуальных значений этой переменной для внешнего цикла. Для этого удобно использовать стек (команды PUSH и POP):
; Внешний цикл, повторяющийся N раз
mov cx, N
metka1:
push cx ; сохранение счетчика внешнего цикла в стеке
; Внутренний цикл, повторяющийся M раз
mov cx, M
metka2:
... ; (тело внутреннего цикла)
loop metka2
... ; (тело внешнего цикла)
pop cx ; восстановление счетчика внешнего цикла
loop metka1
Запись в стек производится по относительному адресу из указателя стека SP (сегментный адрес при этом извлекается из регистра SS). Этот регистр постоянно хранит адрес следующей свободной ячейки стека. При использовании стека обычно нет надобности следить, по каким именно адресам происходит запись в память и изменять эти адреса, так как команды PUSH и POP автоматически модифицируют значение указателя стека. В стек можно записывать только словные (двухбайтовые) значения из регистров или ячеек памяти.
