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

Завдання

Використовуючи вкладені цикли, сформувати і вивести на екран таблицю ASCII-символов з кодами у вказаному діапазоні. Для формування і виводу скористатися одним з 3-х вказаних способів:

  1. формування і виведення одного символу у вкладеному циклі (використовується осередок для одного символу);

  2. формування і виведення одного рядка виводу в зовнішньому циклі (використовується область пам'яті для одного рядка виводу);

3) формування всієї таблиці виводу в пам'яті у вкладених циклах, потім її вивід (використовується область пам'яті для всієї таблиці виводу, включаючи коди, що управляють).

Напрям послідовності символів указує, у напрямі рядків або ж стовпців збільшуватимуться коди символів в таблиці, а довжина (п) послідовності — кількість символів в одному рядку або одному стовпці відповідно. При цьому кожна послідовність (окрім, можливо, першою) повинна починатися з символу з кодом, кратним п.

Рекомендується розділяти символи в одному рядку пропусками для поліпшення зорового сприйняття таблиці.

Варіанти:

Спосіб

діапазон

напрям і довжина (п)

фомув.

вар.

код символів

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

1

виводу

1.

32

-

255

рядки по 15 символів

1

2.

56

-

246

стовпці по 10 символів

2

3.

72

-

244

рядки по 20 символів

3

4.

34

-

198

рядки по 25 символів

1

5.

38

-

204

стовпці по 16 символів

2

б.

43

-

228

рядки по ЗО символів

3

7.

34

-

184

стовпці по 8 символів

1

8.

39

-

147

рядки по 16 символів

3

9.

42

-

164

стовпці по 15 символіз

1

10.

31

-

255

рядки по 24 символів

2

11.

51

-

219

стовпці по 12 символів

3

12.

64

-

203

рядки по 28 символів

1

13.

ЗО

-

252

рядки по 35 символів

2

14.

48

-

219

стовпці по 20 символів

0

Приклад завдання: діапазон код — 35 - 179; напрям послідовності — по стовпцях; довжина послідовності п=14 (по 14 символів в стовпці).

Перший стовпець матиме позиції для код з 2*14=28 до 3*141=41. Перший символ з кодом 35 (грати) займатиме 8-у позицію першого стовпця. Другий стовпець почнеться з коди З * 14 = 42 (зірочка); третій — з коди 4* 14 = 56 ('8') і т. д. Всього буде потрібно (179 35) /14 + 1 = 11 стовпців (орієнтовний підрахунок), причому останній стовпець буде неповним (без символів з кодами 180 і 181).

Результат:

*

8

F

Т

b

P

. м

ъ

и

+

9

G

и

с

q

Д

н

ы

й

/

:

Н

V

а

r

A

0

ь

к

-

;

т

W

е

s

Б

п

э

Л

.

<

J

X

f

t

В

р

ю

м

/

=

К

У

g

u

Г

с

я

н

0

>

L

Z

h

V

Д

т

a

о

#

1

М

[

і

w

Е

У

б

п

$

2

0

N

\

j

X

Ж

ф

в

%

3

А

0

]

k

У

3

X

г

&

4

В

Р

л

1

z

и

ц

д

в

1

5

С

Q

m

{

й

ч

е

і

{

б

D

R

n

1

к

ш

ж

)

7

Е

S

а

0

}

Л

щ

3

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

Посимвольний ввід з клавіатури. Аналіз натискання функціональних клавіш та їх комбінацій

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

DOS надає ряд сервісних функцій, що забезпечують роботу з клавіатурою. Серед них можна виділити групу функцій, що забезпечують посимвольне введення з клавіатури, тобто одноразовий виклик функції дозволяє ввести один символ:

У АН

Опис

Вхід

Вихід

h

Введення символу з БТОІК з очікуванням, з луною, що фільтрує

АЬ = код символу

h

Введення символу з БТПта без очікування, без луня, що не фільтрує

D

І? = 0, якщо символ готовий; АЬ - код символу

h

Введення символу з БТОШ з очікуванням, без луни, що не фільтрує

АЬ = код символу

h

Введення символу з ЗТВІК з очікуванням, без луни, що фільтрує

АЬ = кед символу

Незалежно від роботи поточної програми інформація, що вводиться з клавіатури, потрапляє в буфер клавіатури — область розміром 16 слів в оперативній пам'яті. Якщо працююча програма не обробляє інформацію, що поступає, буфер заповнюється у міру введення, і після 15-ти натиснень на клавіші подальше введення блокується. Завдяки такому буферированию користувач може вводити дані ще до того, як їх запитала програма.

Функції 1, 6, 7, 8 забезпечують введення одного символу з пристрою стандартного введення STDLN. Як STDIN зазвичай виступає клавіатура (також може бути файл, пристрої, підключені до комунікаційних портів). У разі введення з клавіатури функція прочитує один елемент з буфера клавіатури, тобто відомості про одне натиснення користувачем клавіші. Відповідна інформація поміщається в регістр AL.

Клавіші стандартної клавіатури (а також їх певні комбінації) можна умовно розділити на дві групи: атфавітно-цифрові і такі, що управляють. До алфавітпо-цифрових відносяться клавіші (а також їх комбінації з клавішею Shift), яким зіставлені символи з певними ASCII- кодами. За допомогою таких клавіш користувач може вводити текстову інформацію. До клавіш, що управляють, і комбінацій відносяться функціональні клавіші (Fl - F12), управління курсором (Insert, Home, PageUp і ін.), їх комбінації з Alt, Ctrl і Shift, а також комбінації будь- яких клавіш з Alt. З їх допомогою користувач має можливість

віддавати клавіатурні команди. Клавішам, що управляють, і комбінаціям зіставлені розширені коди.

Сенс значення в регістрі AL, повертаного будь-якою функцією посимвольного введення, залежить від того, які саме клавіші натискав користувач при введенні, а також коли саме була викликана функція:

  1. якщо користувач натиснув одну з алфавітно-цифрових клавіш або комбінацій, в AL повертається ASCII-код відповідного символу;

  2. якщо користувач натиснув одну з клавіш, що управляють, або комбінацій, в AL повертається 0 (ознака введення команди з певним розширеним кодом);

  3. якщо функція була викликана безпосередньо після попереднь­ого випадку, в AL повертається розширений код.

Опишемо тепер відмінності між перерахованими функціями:

Очікування. Функції 1, 7 і 8 чекають введення символу: функція, отримавши управління, перевіряє буфер клавіатури, і якщо там немає символу, чекає, поки він там не з'явиться. Функція 6 працює без очікування: якщо в буфері немає символу, вона відразу повертає управління в програму, що викликала, встановивши заздалегідь прапор нуля ZF; якщо ж символ в буфері виявлений, функція скидає ZF і поміщає в AL код символу, як і інші функції.

Луна. При введенні з клавіатури за допомогою функції 1 відбувається відображення на екрані символу з кодом, рівним значенню вихідного регістра AL (луна на екран), інші функції луни на екран не дають.

Фільтрація. У таблиці описів також вказано, чи здійснює функція фільтрацію введення. У разі фільтрації функція реагує на натиснення комбінацій Ctrl-Break і CTRL-C, що управляють, здійснюючи аварійне завершення програми.

Аналіз введеної інформації як правило здійснюється шляхом порівняння коди введеного символу в AL з яким-небудь зумовленим значенням і перехід на відповідну ділянку програми командою умовного переходу.

Якщо потрібно ввести рядок символів, необхідно організувати цикл, що містить команди запиту символу і, можливо, його перевірки, обробки, виходу по натисненню певної клавіші і т. п. Можна також скористатися спеціальною функцією введення рядка OAh int 21h (див. слід, роботу) або функцією файлового введення, указуючи як дескриптор файлу 0 (стандартний пристрій введення).

У наступній таблиці приведені значення розширених код деяких клавіш і комбінаці

Клав і

Код

Клав

Кол

Клаві

Код

Клавіша

Код

Клав

Код

ша

(hex)

іша

(hex)

ша

(hex)

(hex)

іша

(hex)

F1

3Bh

ALT- 3

30h

ALT-О

18h

Alt-1

78h

left

4Bh

F2

3Ch

ALT- C

2 Eh

I ALT-P

19h

Alt-2

79h

righ t

4Dh

F3

F

3Dh

3

ALT- D

2 Oh

ALT-Q A

lOh

1

Alt-3 Ait

7 Ah

7

up

48h

4

F

Eh

3

LT-E

2h

LT-R

A

3h

1

-4

Alt

3h

7

own

Or.

5

F

Fh

4

LT-F

lh

LT-S

A

fh

1

-5

Alt

Ch

7

ome

7 л

6

F

Oh

4

LT-G

2h

LT-T

A

4h

1

-6

Alt

Dh

7

nd

Fh

7

F

lh

4

LT-H

3h

LT-U

A

6h

2

-7

Alt

Sh

7

gUp

9h

8

2h

LT-I

7h

LT-V

Fh

-8

Fh

g Dr.

lh

F

4

A

1

Alt

8

9

3h

LT-J

4h

LT-W

lh

-9

Ch

gDn

lh

10

F

4h

4

LT-K

5h

A

LT-X

Dh

2

Alt

2h

8

hift -F10

Dh

11

F

5h

8

LT-L

6h

A

; LT-Y

5h

1

Alt

3h

8

trl- F10

7 h

12

F

6h

8

LT-M

2h

A

LT-2

Ch

2

Ins

2h

5

lt- F10

lh

LT-A

A

Eh

LT-N

lh

A

lt-0

lh

8

Del

3h

5

I

Клавіші, що управляють, з розширеними кодами найчастіше використовують для управління програмою, що виконується, а звичайні алфавітно-цифрові — для введення текстової інформації у вигляді послідовності ASCII-кодов. Своєрідним виключенням є чотири клавіші, що управляють, яким призначені не розширені, а звичайні ASCII-кодьг:

Backspace- 8h Tab - 9h Enter - ODh = 13 Esc - lBh = 27

Нижче приведений приклад, що запрошує введення в клавіатури одного символу. Якщо цей символ - цифра (N = 0...9), на екран видається повідомлення 'Натиснута цифра N', після чого здійснюється вихід з програми, інакше здійснюється повторний запит символу. При

натисненні П виводиться довідкове повідомлення 'Натискайте цифри'. Опис сегментів, команди ініціалізації ОБ і виходу з програми опущені скорочено.

; Дані

mes db

num db

ASCII-кода helpmes db ; Код

again: mov

клавіатури символу з луною int 21h cmp al, 0

клавіша?

je function

cmp al, 4' діапазону - нижня межа jb less

cmp al, '9' ja greater

mov [num] , al

повідомлення

mov ah, 9 повідомлення на екран

lea dx, mes повідомлення - в DX)

int 21h jmp exit

  1. на вихід

function: mov ah, 8

  1. отримання розширеної коди

int 21h засмічувати екран)

cmp al, 3Bh je help

greater:

less: jmp again

межі діапазону - повторити

help:

ah, 9

dx, helpmes

21h"

again

для

введення 3

розширена

перевірка

верхня межа заносимо код в і виводимо (відносна адреса

справа зроблена повторний виклик (8 - щоб не ЕІ?

якщо вишли за виводимо довідку

повторити введення exit:

Для простоти вихід за верхню і нижню межі діапазону обробля­ються однаково — повторно запрошується введення, тому влучні greater і less указують на одну і ту ж команду (jmp again).