Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л.р.1-12.СПРГ-1(40, укр).doc
Скачиваний:
5
Добавлен:
27.08.2019
Размер:
2.33 Mб
Скачать

Лабораторна работа 10-11.

Тема. Введення/виведення даних.

Ціль: Ознайомитися з методами введення даних з клавіатури та методами виведення даних на екран.

1. Підготовка до роботи.

з методами введення даних з клавіатури та методами виведення даних на екран, котрі наявні у BIOS та DOS [1, стор. 319-351], [3, стор. 580-594, 651-661].

2. Питання для самоконтролю.

  1. Что такое прерывание?

  2. Зачеп необходимы прерывания?

  3. Чем отличаются прерывания BIOS и DOS?

3. Короткі теоретичні відомості

3.1. Вывод на экран в текстовом режиме

3.1.1. Засоби DOS. Згадаємо ще раз першу програму.

; hello. asm

org 100h ; початкове значення лічильника - 100h

use16

start: mov ah,9 ; номер функції DOS - в АН

mov dx, message; адреса рядка - у DX

int 21h ; виклик системної функції DOS

ret ; завершення Сома-програми

message db “Hello World!",0Dh,0Ah,'$'; рядок для виводу

Функція DOS 09h — Записати символ у STDOUT без перевірки на Ctrl-Break

Уведення:

АН = 09h

DL = ASCII-код символу (крім FFh)

Вивід:

? Ніякого?, відповідно до документації

На прикладі першої програми на асемблері ми вже познайомилися з одним зі способів виводу тексту на екран — викликом функції DOS 09h. Це далеко не єдиний спосіб виводу тексту — DOS надає для цього кілька функцій.

Функція DOS 02h — Записати символ у STDOUT з перевіркою на Ctrl-Break

Уведення:

АН=02h

DL = ASCII-код символу

Вивід:

Ніякого, відповідно до документації, але насправді: AL = код останнього записаного символу (дорівнює DL, крім випадку, коли DL = 09h (табуляція), тоді в AL повертається 20h).

Ця функція при виводі на екран обробляє деякі керуючі символи — вивід символу BEL (07h) приводить до звукового сигналу, символ BS (08h) приводить до руху курсору вліво на одну позицію, символ НТ (09h) заміняється на кілька пробілів, символ LF (0Ah) опускає курсор на одну позицію вниз, і CR (0Dh) приводить до переходові на початок поточного рядка.

Якщо в ході роботи цієї функції була натиснута комбінація клавіш Ctrl-Break, викликається переривання 23h, що за замовчуванням здійснює вихід із програми.

Наприклад, напишемо програму, що виводить на екран усі ASCII-символи, 16 рядків по 16 символів у рядку.

Приклад 1

; dosoutl. asm

; Виводить на екран усі ASCII-символи

;

org 100h ; початок Сома-файлу

use16

mov cx, 256 ; вивести 256 символів

mov dl,0 ; перший символ - з кодом 00

mov ah,2 ; номер функції DOS “вивід символу”

cloop: int 21h ; виклик DOS

inc dl ; збільшення DL на 1 - наступний символ

test dl,0Fh ; якщо DL не кратний 16,

jnz continue_loop ; продовжити цикл,

push dx ; інакше: зберегти поточний символ

mov dl,0Dh ; вивести CR

int 21h

mov dl,0Ah ; вивести LF

int 21h

pop dx ; відновити поточний символ

continue_loop:

loop cloop ; продовжити цикл

ret

Тут за допомогою команди LOOP оформляється цикл, що виконується 256 разів (значення регістра СХ на початку циклу). Регістр DL містить код символу, що дорівнює нулеві на початку циклу і збільшується щораз на 1 командою INC DL. Якщо значення DL відразу після збільшення на 1 кратно 16, воно тимчасово зберігається в стеці і на екран виводяться символи CR і LF, що виконують перехід на початок нового рядка. Перевірка виконується командою TEST DL,0Fh — результат операції AND над DL і 0Fh буде нулем, тільки якщо молодші чотири біти DL дорівнюють нулеві, що і відповідає кратності шістнадцяти.

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