Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кудря Схемотехника ( дополнить ).docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
97.98 Кб
Скачать

Завдання

Зарезервувати в пам'яті рядок, заповнити його в циклі ASCII- символами в діапазоні (32 ., 254) з вказаним кроком, а потім видати цей рядок на екран за допомогою функції 40h DOS (int 21h). У таблиці варіантів вказані а) порядок проходження код символів (від менших до великих або навпаки, що змінюються на 1, 2 або 3), би) порядок заповнення рядка (прямій — від молодших байтів до старших, або зворотний — від старших до молодших), в) спосіб організації циклу (командою Jxx або LOOP, з пост- або передумовою). У протокол роботи включити блок-схему програми.

Варіанти:

вар

послідовність

порядок заповнення

цикл

1.

зворотна з кроком 1 (254, 253 32)

прямій

Jxx 3 лередумо-

2.

пряма з кроком 1 (32, 33 ...,

зворотний

Jxx 3

3.

зворотна з кроком 2 (254, 252

прямій

LOOP

4.

пряма з кроком 2 (32, 34

зворотний

Jxx 3

5.

зворотна з кроком 3 (254, 251

прямій

Jxx 3

б.

пряма з кроком 3 (32, 35

зворотним

LOOP

7.

зворотна з кроком 1 (254, 253

зворотний

Jxx 3

8.

пряма з кроком 1 (32, 33

прямій

Jxx з

9.

зворотна з кроком 2 (254, 252

зворотний

LOOP

10

пряма з кроком 2 (32, 34

прямій

Jxx 3

11

зворотна з кроком 3 (254, 251

зворотний

Jxx 3

12 " ЇЗ

пряма з кроком 3 (32, 35 ...,

прямій

LOO?

зворотна з кроком 4 (254, 250

зворотний

Jxx 3

14

пряма з кроком 4 (34, 38

прямій

Jxx 3

Лабораторна робота №3

Дослідження програмного управління курсором через вкладені асемблерні цикли

Теоретичні відомості

Функції DOS підтримують обробку код, що управляють. Це означає, що при виведенні символів з цими кодами на екран замість

безпосередньо виведення символів проводяться певні дії, що управляють:

07h (BEL) — звуковий сигнал (із стандартного звукового пристрою);

08h (BS) — Backspace (курсор зрушується на 1 позицію вліво);

09h (НТ) — горизонтальна табуляція (курсор зрушується до найближчої правої межі табуляції);

10 = OAh (LF) — переклад рядка (курсор зрушується на рядок вниз, залишаючись в тій же позиції);

13 = ODh (CR) — повернення каретки (курсор зрушується в початок поточного рядка).

Коди, що управляють, дають можливість виводити на екран форматований текст в режимі телетайпу. Текстовий екран при цьому зазвичай складається з 25 рядків по 80 символів. Рядки нумеруються з 1-ою (верхня) по 25-у (нижняя). Якщо курсор знаходиться в останній позиції рядка, виведення символу приводить до автоматичного перекладу курсора в початок нового рядка. Якщо курсор знаходиться в передостанньому (25-й) рядку, то його переклад на наступний рядок приводить до зрушення зображення на рядок вгору.

При перенаправленні виводу інтерпретація код, що управляють, може мінятися.

Вкладені цикли. Нерідко при програмуванні (зокрема, при обробці двовимірних масивів) доводиться повторювати виконання деякого циклу в зовнішньому циклі. Внутрішній цикл при цьому називається вкладеним. Зовнішній цикл організовується відповідно до тих же принципів, що і цикли взагалі. Проте необхідно стежити затим, щоб не порушувалася зміна змінних вкладеного і зовнішнього циклів. Один з варіантів: використання двох різних осередків як змінні цикли, наприклад:

шоу аі, 0 ;

змінної зовнішнього циклу теїкаї: ; початок зовнішнього циклу

шоу аїі, 0 ;

змінної внутрішнього циклу | п^ка2: ; початок внутрішнього циклу іпс аЬ ; зі

зміна АН

сшр ah, N jb metka2

внутрішнього циклу іпс аі cmp al, М

ініціалізація

ініціалізація

кінець

зміна A

jb metkal зовнішнього циклу

У разі ж використання одного осередку для змінних обох циклів (як, наприклад, при використанні команди LOOP для обох циклів) необхідно організувати збереження і відновлення актуальних значень цією змінною для зовнішнього циклу. Для цього зручно використовувати стек (команди PUSH і POP):

; Зовнішній цикл, N разів, що повторюється mov сх, N

metkal:

push сх ; збереження

лічильника зовнішнього циклу в стеку

; Внутрішній цикл, М разів, що повторюється mov сх, М

metka2:

... ; (тіло внутрішнього циклу)

loop metka2

... ; (тіло зовнішнього циклу)

pop сх ; відновлення

лічильника зовнішнього циклу loop metkal

Запис в стек проводиться за відносною адресою з покажчика стека SP (сегментна адреса при цьому витягується з регістра SS). Цей регістр постійно зберігає адресу наступного вільного осередку стека. При використанні стека зазвичай немає потреби стежити, по яких саме адресам відбувається запис в пам'ять і змінювати ці адреси, оскільки команди PUSH і POP автоматично модифікують значення покажчика стека. У стек можна записувати тільки словные (двобайтові) значення з регістрів або елементів пам'яті.