M_Asm2009LS
.pdf3 |
|
a − x + 2, |
c + d < 0, |
0, |
|
a + b > 1000, |
а = 344 |
||
|
|
|
|
|
|
|
|
|
b =58 |
|
|
b − x − 1, |
c + d = 0, |
x = a, |
|
a + b = 1000, |
|||
|
|
|
|
||||||
|
f |
|
c + d > 0 and x > d , |
|
|
a + b < 1000, |
c = -300 |
||
|
= a + b, |
1000, |
d = 225 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
c + d , |
c + d > 0 |
and x = d , |
|
|
|
|
|
|
|
d − x, |
c + d > 0 |
and x < d , |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
a + b, x = 0, |
|
0, |
a ≠ b, |
а = 13 |
|||
|
|
|
x > 0, |
|
|
a = b and c > d, |
b =26 |
||
|
|
a − b, |
|
a, |
|||||
|
f |
= |
x < 0 and a > b, |
x = |
a = b and c < d , |
c = -255 |
|||
|
|
a + d, |
1, |
d = 615 |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
c + d, |
x < 0 and a ≤ b, |
c |
a = b and c = d , |
|
|||
5 |
|
x + b, |
c = d, |
|
d , a ≠ b, |
а = 64 |
|||
|
|
|
c > d , |
|
|
a = b and a > d , |
b =783 |
||
|
|
a − b, |
|
a, |
|||||
|
f |
= |
c < d and a > b, |
x = |
a = b and a < d , |
c = 454 |
|||
|
|
x + d , |
b, |
d = -89 |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
c + a, |
c < d and a ≤ b, |
c |
a = b and a = d, |
|
|||
6 |
|
c + b, |
|
a ≥ 10 and b ≠ 10, |
c + 1, |
c > d , |
а = 54 |
||
|
|
|
|
|
|
|
|
|
b =16 |
|
|
b − c, |
|
a ≥ 10 and b = 10, |
x = c − d , |
c = d , |
|||
|
|
|
|
||||||
|
f |
|
|
a < 10 and x > b , |
|
+ 1, |
c < d, |
c = -34 |
|
|
= a + b − 3, |
d |
d = -62 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
c + d , |
|
a < 10 and x = b, |
|
|
|
|
|
|
|
d − x, |
|
a < 10 and x < b, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
a − c, |
|
b > a, |
|
c, |
|
a > d , |
а = 87 |
|
|
|
|
|
|
|
|
|
b =89 |
|
|
b + a, |
|
b = a, |
|
x = 1, |
|
a = d , |
|
|
|
|
|
|
|
||||
|
f |
|
|
b < a and x > a, |
|
+ 1, |
a < d, |
c = -87 |
|
|
= a + b − x, |
d |
d = -64 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
c + d + 1, |
b < a and x = a, |
|
|
|
|
||
|
|
d − x − 1, |
b < a and x < a, |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
8 |
|
a − x + 2, |
c + d < 0, |
0, |
|
a + b > 1000, |
а = 76 |
||
|
|
|
|
|
|
|
|
|
b =48 |
|
|
b − x − 1, |
c + d = 0, |
x = a, |
|
a + b = 1000, |
|||
|
|
|
|
||||||
|
f |
|
c + d > 0 and x > d , |
|
|
a + b < 1000, |
c = -484 |
||
|
= a + b, |
1000, |
d = 382 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
c + d , |
c + d > 0 |
and x = d, |
|
|
|
|
|
|
|
d − x, |
c + d > 0 |
and x < d, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
|
a + x, |
x = 0, |
|
0, |
a ≠ b, |
а = 484 |
||
|
|
|
x > 0, |
|
|
a = b and a > d, |
b =34 |
||
|
|
a − x, |
|
a, |
|||||
|
f |
= |
x < 0 and c > b, |
x = |
a = b and a < d, |
c = 433 |
|||
|
|
a + d , |
1, |
d = -43 |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
c + d , |
x < 0 and c ≤ b, |
c |
a = b and a = d, |
|
41
10 |
|
x + b, |
c ≥ d and a = 10, |
d , |
a ≠ b, |
а = 10 |
||||
|
|
|
c ≥ d and a ≠ 10, |
|
a = b and a > d , |
b =13 |
||||
|
|
a − b, |
a, |
|||||||
|
f |
= |
c < d and a > b, |
x = |
a = b and a < d , |
c = -18 |
||||
|
|
x + d , |
b, |
d = 676 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
c + a, |
c < d and a ≤ b, |
c |
a = b and a = d, |
|
||||
11 |
|
c + x, |
|
b ≥ 10 and a ≠ 10, |
c + 1, |
c ≥ d , |
а = 44 |
|||
|
|
|
|
|
|
|
x = |
|
|
b =103 |
|
|
b − c, |
|
b ≥ 10 and a = 10, |
d |
+ 1, |
c < d , |
|||
|
|
|
|
|||||||
|
f |
|
|
b < 10 and x > c , |
|
|
|
c = -34 |
||
|
= a + b − 3, |
|
|
|
d = 625 |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
c + d , |
|
b < 10 and x = c, |
|
|
|
|
||
|
|
d − x, |
|
b < 10 and x < c, |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
12 |
|
a − c, |
|
b > a, |
|
c, |
|
a > d + 10, |
а = 554 |
|
|
|
|
|
|
|
|
|
|
|
b =103 |
|
|
b + a, |
|
b = a, |
|
x = a, |
|
a = d + 10, |
||
|
|
|
|
|
|
|||||
|
f |
|
|
b < a and x > c, |
|
+ 1, |
a < d + 10, |
c = 304 |
||
|
= a + c − x, |
d |
d = -66 |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
x + d − 1, |
b < a and x = c, |
|
|
|
|
|||
|
|
d − x + 1, |
b < a and x < c, |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
13 |
|
a − x, |
c < 0 and x > d , |
−1, a > 255, |
а = 344 |
|||||
|
|
|
|
|
|
|
|
|
|
b =58 |
|
|
b − x, |
c < 0 and x = d , |
a, |
a = 255, |
|||||
|
f |
|
c < 0 and x < d , |
x = |
a < 255 and b = 255, |
c = -300 |
||||
|
= a + b, |
b, |
d = 225 |
|||||||
|
|
|
|
|
c > 0 , |
|
a < 255 and b ≠ 255, |
|||
|
|
c + d + 255, |
1, |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
d − x + 255, |
c = 0, |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
14 |
|
a − x + 2, |
|
c + d < 0, |
c, |
|
a > d + 10, |
а = 13 |
||
|
|
|
|
|
|
|
|
|
|
b = 26 |
|
|
b − x − 1, |
c + d = 0, |
x = a, |
|
a = d + 10, |
||||
|
|
|
|
|||||||
|
f |
|
c + d > 0 and x > d , |
|
+ 1, |
a < d + 10, |
c = -255 |
|||
|
= a + b, |
d |
d = 615 |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
c + d , |
c + d > 0 |
and x = d , |
|
|
|
|
||
|
|
d − x, |
c + d > 0 |
and x < d , |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
15 |
|
a + x, |
x = 0, |
|
|
−1, a > 255, |
а = 64 |
|||
|
|
|
x > 0, |
|
|
|
a = 255, |
b =783 |
||
|
|
a − x, |
|
|
a, |
|||||
|
f |
= a + d , |
x < 0 and c > b, |
x = b, a < 255 and b = 255, |
c = 454 |
|||||
|
|
|
|
|
|
|
|
|
|
d = -89 |
|
|
|
|
|
|
|
|
|
|
|
|
|
c + d , |
x < 0 and c ≤ b, |
1, |
a < 255 and b ≠ 255, |
|
||||
16 |
|
x + b, |
c ≥ d and a = 10, |
0, |
a ≠ b, |
а = 54 |
||||
|
|
|
c ≥ d and a ≠ 10, |
|
a = b and c > d, |
b =16 |
||||
|
|
a − b, |
a, |
|||||||
|
f |
= |
c < d and a > b, |
x = |
a = b and c < d , |
c = -34 |
||||
|
|
x + d , |
1, |
d = -62 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
c + a, |
c < d and a ≤ b, |
c |
a = b and c = d, |
|
42
17 |
|
a + x, |
x = 0, |
|
d , |
a ≠ b, |
|
а = 87 |
|||
|
|
|
|
x > 0, |
|
|
a = b and a > d , |
b =89 |
|||
|
|
a − x, |
|
a, |
|||||||
|
f |
= |
|
x < 0 and c > b, |
x = |
a = b and a < d |
, |
c = -87 |
|||
|
|
a + d , |
b, |
d = -64 |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c + d , |
x < 0 and c ≤ b, |
c |
a = b and a = d, |
|
|||||
18 |
|
x + b, |
c ≥ d and a = 10, |
c + 1, |
c ≥ 1 and d = 1 |
а = 76 |
|||||
|
|
|
|
c ≥ d and a ≠ 10, |
|
|
c ≥ 1 and d ≠ 1, |
b =48 |
|||
|
|
a − b, |
x = c − d , |
||||||||
|
f |
= |
|
c < d and a > b, |
|
|
c < d, |
|
c = -484 |
||
|
|
x + d , |
d + 1, |
|
d = 382 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c + a, |
c < d and a ≤ b, |
|
|
|
|
|
|||
19 |
|
c + x, |
|
b ≥ 12 and a ≠ 24, |
0, |
a ≠ b, |
|
а = 484 |
|||
|
|
|
|
|
|
|
|
|
|
|
b =34 |
|
|
b − c, |
|
b ≥ 12 and a = 24, |
a, |
a = b and c > d, |
|||||
|
f |
|
|
|
b < 12 and x > c , |
x = |
a = b and c < d , |
|
c = 433 |
||
|
= a + b − 3, |
1, |
|
d = -43 |
|||||||
|
|
|
|
|
b < 12 and x = c, |
|
a = b and c = d, |
||||
|
|
c + d , |
|
c |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d − x, |
|
b < 12 and x < c, |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
a − c − 255, |
b > a, |
d , |
a ≠ b, |
|
а = 10 |
||||
|
|
|
|
|
|
|
|
|
|
|
b =13 |
|
|
b + a + 255, |
b = a, |
a, |
a = b and c > d |
, |
|||||
|
f |
|
|
|
b < a and d > − x, |
x = |
a = b and c < d , |
c = -18 |
|||
|
= b + c − x, |
b, |
d = 676 |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x + d − 1, |
b < a and d = − x, |
c |
a = b and c = d , |
|
||||
|
|
d − x + 1, |
b < a and d < −x, |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
2.Задано два впорядкованих за зростанням масиви цілих знакових (беззнакових) чисел X, Y розмірності n. Розробити програму, що:
1)дописує масив X до масиву Y;
2)дописує масив Y до масиву X;
3)об’єднує обидва масиви в один упорядкований за зростанням масив;
4)додає до елементів масиву X відповідні елементи масиву Y.
5)додає до елементів масиву Y відповідні елементи масиву X.
6)віднімає від елементів масиву X відповідні елементи масиву
Y.
7)додає до елементів масиву Y найбільший елемент масиву X.
3.Задано масив X розмірності n знакових цілих чисел. Розробити програму:
1)масив упорядкувати за спаданням елементів;
2)масив упорядкувати за незростанням елементів;
3)знаходження найбільшого та найменшого елементів масиву;
43
4)знаходження різниці між найбільшим та найменшим елементами масиву;
5)обчислення кількості нульових елементів у масиві;
6)знаходження суми елементів масиву.
4.Задано масив X розмірності n знакових цілих чисел. Розробити програму:
1)впорядкування за спаданням елементів масиву;
2)впорядкування за незростанням елементів масиву;
3)знаходження суми найбільшого та найменшого елементів масиву;
4)суму додатних елементів масиву;
5)додавання до елементів масиву його найбільшого елемента;
6)одержання суми від’ємних елементів масиву.
5.Побудувати блок-схему та написати процедуру обчислення суми виразу
1 |
10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
10 |
|
s = ∑(100 + (−1)i (1 + 2 * i)) |
|
|
|
|
|
s = ∑(−1)i (2 * i − 1) |
|||||||||||||
|
i=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=0 |
|
3 |
12 |
(10 + (−1)i (24 + 2 * i)) |
|
|
|
4 |
|
15 |
|
||||||||||
|
s = ∑ |
|
|
|
|
s = ∑(−1)i (2 * i + (−1)i 3) |
|||||||||||||
|
i=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=0 |
|
5 |
10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
10 |
|
|
s = ∑(−1)i (255 + (−1)i (3 * i)) |
|
|
s = ∑(5 + (−1)i (3 * i − 5)) |
|||||||||||||||
|
i=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=0 |
|
7 |
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
15 |
|
|
s = ∑(−1)i (8 + (−1)i (4 + 2 * i)) |
|
|
s = ∑(−1)i (2 * i + (−1)i 3) |
|||||||||||||||
|
i=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=0 |
|
9 |
17 |
((−1)i (1 + 4 * i)− 17) |
|
|
|
|
|
10 |
|
13 |
|
||||||||
|
s = ∑ |
|
|
|
|
|
|
s = ∑((−1)i (2 * i − 13)+ 13 * i) |
|||||||||||
|
i=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=0 |
|
11 |
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
|
15 |
|
|
s = ∑((1 + 4 *i)− (−1)i+115) |
|
|
s = ∑(−1)i+1 (7 * i + (−1)i 3 * i) |
|||||||||||||||
|
i=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=0 |
||
13 |
15 |
|
i+1 ( |
|
|
|
|
|
|
|
|
)) |
|
14 |
|
18 |
(5 + (−1)i+1 (4 * i − 5)) |
||
s = ∑ |
(−1) |
+ (−1) |
i ( |
|
|
|
s = |
∑ |
|||||||||||
|
|
25 |
|
5 * i |
|
|
|
|
|
|
|||||||||
|
i=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=0 |
|
15 |
20 |
|
i ( |
|
|
|
|
|
|
|
|
|
|
)) |
16 |
|
15 |
(−1)i ((−1)i+1 2 * i + (−1)i 3) |
|
s = ∑ |
(−1) |
|
|
|
i+1 ( |
|
2 * i |
s = |
∑ |
||||||||||
|
|
3 + (−1) |
|
4 + |
|
|
|
|
|||||||||||
|
i=3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=0 |
|
17 |
12 |
( |
|
|
|
|
i ( |
|
|
|
)) |
|
|
18 |
s = |
21 |
(2 * i + (−1)i 3 * i) |
||
|
s = ∑ |
(8 * i + (−1) |
|
4 + 2 * i |
|
|
|
|
|
|
∑ |
|
|||||||
|
i=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=0 |
|
19 |
17 |
( |
|
i ( |
) |
− (−1) |
i+1 |
|
|
|
) |
|
20 |
s = |
13 |
(−1)i ((−1)i (2 * i)+ 13* i) |
|||
|
s = ∑ |
(−1) |
4 * i |
|
17 |
|
|
|
|
∑ |
|
||||||||
|
i=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=0 |
|
44
Лабораторна робота № 4 Введення-виведення символів і рядків
Мета: ознайомлення з можливостями введення-виведення текстової інформації за допомогою DOS та BIOS переривань. Розглянути способи виведення інформації на екран та введення з клавіатури.
План заняття.
1.Введення символів та рядків з клавіатури.
2.Виведення символів та рядків.
3.Приклади.
Теоретичні відомості
1. Введення символів та рядків з клавіатури
Введення символів і рядків з клавіатури в програмах мовою асемблера здійснюється за таким алгоритмом:
−у регістр AH записується номер функції введення;
−для введення рядка необхідно описати буфер певної структури і в регістр DX записати адресу цього буфера;
−виконати команду int 21h.
Опишемо функції переривання 21h, які використовуються для введення інформації з клавіатури.
Функція 01h – використовується для введення символу з клавіатури
Вхід: AH=01h
Вихід: AL – ASCII код символу клавіші, яка була натиснута Опис: Очікує доти, поки не буде натиснута будь-яка клавіша.
Читає символ зі стандартного вхідного пристрою (клавіатури), ASCII код символу записує в регістр AL і відображує цей символ на стандартний вихідний пристрій (дисплей). Введення розширених клавіш (F1-F12, PgUp, курсор і т.п.) вимагає двох звернень до цієї функції. Перше звернення повертає AL=0, друге – повертає в AL розширений код ASCII.
Функція 07h
Вхід: AH=07h
Вихід: AL – ASCII код символу клавіші, яка була натиснута Опис: Читає символ зі стандартного вхідного пристрою та
записує ASCII код символу в регістр AL. Необхідно викликати двічі для введення розширених клавіш.
Функція 08h
Вхід: AH=08h
45
Вихід: AL – ASCII код символу клавіші, яка була натиснута Опис: Читає символ зі стандартного вхідного пристрою та
записує ASCII код символу в регістр AL. При виявленні Ctrl-Break виконується переривання INT 23H. Необхідно викликати двічі для введення розширених клавіш.
Функція 0ah
Введення рядка в буфер.
Вхід: AH=0ah
DS:DX – адреса вхідного буфера (дивися нижче) Вихід: буфер містить уведений рядок, що закінчується
символом CR (0dh)
Опис: Буфер за адресою DS:DX потрібно описати так:
|
Max |
|
? |
? |
? |
? |
? |
? |
… |
|
|
|
MAX – максимально припустима довжина рядка (від 1 до 254). |
||||||||||
При виході буфер заповнений даними в такий спосіб: |
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
||
|
Max |
Len |
T |
E |
X |
T |
… |
0dh |
|
Len – реальна довжина введеного рядка без врахування символу CR (0dh).
Символи зчитуються з клавіатури до символу повернення каретки CR (0dh). Якщо досягнуто довжини MAX, то включається консольний дзвінок для кожного чергового символу, поки не буде натиснута клавіша повернення каретки CR (Enter). Другий байт буфера заповнюється реальною довжиною введеного рядка, не враховуючи символу повернення каретки CR, який записується в буфер. Більшість розширених клавіш ігнорується. При розпізнаванні Ctrl-Break виконується переривання INT 23h (буфер залишається незмінним).
Функція 0ch
Введення з очищенням
Вхід: AH=0ch
AL – номер функції введення (01H, 06H, 07H, 08H або
0aH)
Вихід: немає
Опис: Очищає буфер від інформації, введеної раніше, а потім викликає функцію введення, яка задана в AL. Це змушує систему очікувати введення наступного символу.
2. Виведення символів та рядків
Виведення інформації в програмах мовою асемблера здійснюється
46
за допомогою функцій DOS (переривання 21h) або BIOS (переривання 10h). Для виведення потрібно виконати такі дії:
−у визначені регістри процесора завантажити символ (який виводиться) або адресу буфера символьного рядка (який виводиться );
−у регістр AH записати номер функції для виконання операції виведення;
−виконати команду int 21h або int 10h.
Нижче наведено перелік функцій переривань 21h і 10h, які використовуються для виведення інформації.
Переривання 21h.
Функція 02h
Виведення символу
Вхід: AH=02h
DL= ASCII код символу, що виводиться
Вихід: немає
Опис: Функція переривання виводить символ на стандартний пристрій виведення. Обробляє символ Backspace (ASCII 8), переміщує курсор на одну позицію вліво і залишає його в новій позиції.
Функція 05h
Виведення на принтер.
Вхід: AH=05h
DL= ASCII код символу, що виводиться
Вихід: немає
Опис: Функція переривання виводить символ на стандартний пристрій друку. За замовчуванням це пристрій, який має логічне ім’я LPT1. Команда DOS MODE може перенаправляти це виведення.
Функція 09h
Виведення рядка.
Вхід: AH = 09h
DS:DX = адреса символьного рядка, що закінчується
символом '$'.
Вихід: немає
Опис: Рядок, окрім символу '$', виводиться на стандартний пристрій виведення. Символи Backspace обробляються як у функції 02h. Щоб перейти на новий рядок, у текст записують пару символів керування CR і LF (ASCII коди 13h і 0ah відповідно).
Переривання 10h.
Установка курсора
Функція 02h
Вхід: AH=02h
47
BH = відеосторінка
DH, DL = рядок, стовпчик (відраховуючи від 0)
Вихід: немає
Опис: Установлює курсор у позицію DH,DL. Установка курсора на рядок 25 робить курсор невидимим.
Функція 09h
Виведення символ/атрибут у поточній позиції курсора.
Вхід: AH=09h
BH = номер відеосторінки
AL = записуваний символ
CX = лічильник (скільки екземплярів символу
записати)
BL = відео атрибут (текст) або колір (графіка)
Вихід: немає
Опис: Виводить на екран у поточну позицію курсора символ із заданим атрибутом.
Функція 0ah
Виведення символу в поточній позиції курсора.
Вхід: AH=0ah
BH = номер відеосторінки
AL = записуваний символ
CX = лічильник (скільки екземплярів символу
записати)
Вихід: немає
Опис: Виводить на екран у поточну позицію курсора заданий символ.
Функція 13h
Виведення рядка.
Вхід: AH=13h
ES:BP – адреса рядка, який виводиться
CX − довжина рядка (підраховуються тільки символи) DH, DL − позиція (рядок, стовпчик) початку рядка BH − номер сторінки
AL − код під функції:
атрибут у регістрі BL:
BL= 0 – курсор без зміни
BL=1 – курсор у кінці рядка
BL=2 – формат рядка: char, attr,...; курсор без зміни BL=3 – формат рядка: char, attr,...; курсор у кінці рядка
Вихід: немає
48
Опис: Виводить рядок із позиції, в якій знаходиться курсор. Символи 0dh, 0ah, 08h і 07h трактуються як команди керування і не відображуються на екрані.
Деякі функції переривання 10h використовуються для виведення атрибута символу. Для кольорових адаптерів у текстовому режимі атрибут визначається так:
|
7 |
|
|
6 |
|
5 |
4 |
|
3 |
|
2 |
|
1 |
0 |
|
|
fgB |
|
Background |
|
|
brt |
|
foreground |
|
|
|||||
foreground – колір переднього плану (від 0 до 0f); |
|
|
|
||||||||||||
brt – інтенсивність: 1= передній план яскравості; |
|
|
|
||||||||||||
background – фоновий колір (від 0 до 7); |
|
|
|
|
|
||||||||||
fg – мерехтіння: 1=передній план мерехтіння; |
|
|
|
|
|
||||||||||
Відеоадаптер підтримує такі кольори: |
|
|
|
|
|
||||||||||
00H |
– чорний |
|
|
08H – темно-сірий |
|
|
|
||||||||
01H |
– синій |
|
|
09H – яскраво-синій |
|
|
|||||||||
02H |
– зелений |
|
|
0aH – світло-зелений |
|
|
|||||||||
03H |
– голубий |
|
|
0bH – світло-блакитний |
|
|
|||||||||
04H |
– червоний |
|
|
0cH – світло-червоний |
|
|
|||||||||
05H |
– рожевий |
|
|
0dH – світло-рожевий |
|
|
|||||||||
06H |
– коричневий |
0eH – жовтий |
|
|
|
||||||||||
07H |
– сірий |
|
|
0fH – білий |
|
|
|
|
|
||||||
|
Обчислити значення атрибута можна, використовуючи такий |
||||||||||||||
вираз: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(фон * 16) + передній план + (128 для мерехтіння). |
|||||||||||||
|
Приклад. Наведений нижче фрагмент програми ілюструє |
||||||||||||||
процес виведення рядка на екран. |
|
|
|
|
|
|
|
|
|||||||
|
mov |
AH,09H |
|
;Вибір функції переривання |
|||||||||||
|
mov |
DX,OFFSET STR |
|
;Занесення в DX адреси |
|||||||||||
|
|
|
|
|
|
|
|
;рядка, який виводитиметься |
|||||||
|
int |
|
21H |
|
|
|
;виклик переривання |
|
|
||||||
. . . |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
STR |
DB |
10,13,'Hello$' |
;Опис рядка |
|
|
|
Розв’язування задач за тематикою заняття
Задача 1. Задано символьний рядок, який складається з декількох послідовностей символів, які розділяються не менше ніж одним символом пробіл (' '). Розробити програму, яка для заданого символьного рядка знаходить перше найбільше за довжиною слово, яке складається з букв латинського алфавіту.
Розв’язування.
49
Data |
Segment |
para 'Data' |
|
max |
= 255 |
|
|
string |
db ' Input string |
? ','$' |
|
rez_p1 |
db ' The first word most : ','$' |
||
rez_p2 |
db ' No words ','$' |
||
inputs |
label byte |
|
|
maxs |
db max |
|
|
nums |
db ? |
|
|
strs |
db max dup(' ') |
|
|
Data |
Ends |
|
|
Code |
Segment |
para 'code' |
|
|
Assume |
cs:Code,ds:Data,es:Data |
|
Main |
Proc far |
|
|
|
push DS |
|
|
|
sub AX,AX |
|
|
|
push AX |
|
|
|
mov AX,Data |
|
|
|
mov DS,AX |
|
|
|
lea DX, string |
; Завантаження відносної адреси повідомлення. |
|
|
mov AH,09h |
|
|
|
int 21h |
|
; Виведення на екран повідомлення. |
|
mov DL,0dh |
; Переведення курсора на новий рядок. |
|
|
mov AH,2 |
|
|
|
int 21h |
|
|
|
mov DL,0ah |
|
|
|
int 21h |
|
|
|
lea DX,inputs |
; Завантаження відносної адреси для |
|
|
mov AH,0Ah |
; введення рядка. |
|
|
int 21h |
|
; Введення рядка. |
|
lea SI,strs |
; Завантаження відносної адреси введеного |
|
|
|
|
; рядка. |
|
mov DH,' ' |
; Символ ‘ ‘ (пробіл) – у регістр DH. |
|
|
mov AH,0 |
; Ознака виділеного слова. |
|
|
mov BP,0 |
; Довжина найбільшого слова. |
|
|
mov BX,0 |
; Довжина поточного слова. |
|
|
mov CH,0 |
; Очищення регістра CH. |
|
|
mov CL,nums |
; Кількість введених символів у регістр CL. |
|
|
cmp CX,0 |
; Перевірка: чи були введені символи. |
|
|
jne m0 |
|
; Перехід, якщо були введені символи. |
|
jmp mns |
|
; Введених символів немає. Вихід з програми. |
50 |
|
|
|