Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SP_Lab_1.doc
Скачиваний:
4
Добавлен:
18.08.2019
Размер:
361.47 Кб
Скачать

Лабораторная работа №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 автоматически модифицируют значение указателя стека. В стек можно записывать только словные (двухбайтовые) значения из регистров или ячеек памяти.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]