Лабораторна робота № 10
Мета роботи
Ознайомлення з методикою програмування зовнішнього пристрою ПЕОМ клавіатури за допомогою переривань.
1. Зміст роботи
В даній лабораторній роботі студенти самостійно створюють мовою Асемблера програмний модуль, який складається з основної програми і процедури обробки переривань від клавіатури, і на його базі знайомляться з особливістю програмування зовнішніх пристроїв за подіями. Для візуального відображення подій використовується пряме програмування відеопам’яті в текстовому режимі. Перед виконанням індивідуального завдання пропонується ознайомитися з роботою запропонованої моделі.
2. Теоретичні відомості
2.1. Переривання та їх обробка
Нагадаємо послідовність дій, які відбуваються в ПЕОМ при обробці переривань від зовнішніх пристроїв:
В результаті функціонування зовнішнього пристрою (наприклад, при натисканні або відтисканні клавіш клавіатури, або із системного таймера через проміжки часу приблизно в 65,5 млсек) на контролер переривання надходить сигнал, за яким контролер може сформувати для процесора сигнал "Запит переривання".
Процесор закінчує виконання чергової команди програми (в деяких випадках, в залежності від чергової команди процесор безумовно виконує ще одну команду - див. п. f).
Процесор аналізує ознаку дозволу на переривання (прапорець IF), яка міститься в регістрі ознак (FLAGS). Якщо IF=0, процесор ігнорує запит і продовжує виконувати програму.
Якщо IF=1, процесор подає на контролер переривання сигнал "Підтвердження запиту"
Одержавши сигнал "Підтвердження запиту", контролер переривань передає процесору байт даних N (N - номер вектора переривань), значення якого ідентифікує зовнішній пристрій, наприклад, N=9 для клавіатури.
Процесор записує в стек вміст регістра ознак, після чого встановлює IF=0, та записує в стек вміст регістрів CS та IP. При запису в стек використовується логічна адреса SS:SP, тобто використовується стек програми, яка переривається.
Процесор завантажує регістр IP значенням слова пам'яті за адресою 0000N*4, а регістр CS - значенням слова пам'яті за адресою 0000N*4+2. В реальному режимі перший 1 Kбайт оперативної пам’яті призначається для таблиці, яку називають таблицею векторів переривань. Таблиця містить 256 рядків по 4 байти на рядок. Кожний рядок таблиці переривань використовується для зберігання повної логічної адреси процедури обробки переривань (слово для сегментної складової та слово для зміщення в сегменті). Самі ж процедури обробки переривань можуть розміщуватись будь-де в області оперативної пам’яті.
Процедура обробки переривань повинна закінчуватись командою IRET. Ця команда відновлює вміст регістра FLAGS із стеку, а також регістрів CS та IP, повертаючи управління програмі, яка була перервана.
2.2. "Перехоплення" переривань
Операційні системи мають в своєму складі процедури обробки переривань від усіх стандартних зовнішніх пристроїв ПЕОМ. При роботі програм операційної системи встановлюються відповідні вектори в таблиці векторів переривань. В реальному режимі процесорів 80х86 та Pentium інші програми мають можливість безпосереднього доступу як до зовнішніх пристроїв, так і до таблиці векторів переривань. Нехай, наприклад, користувач бажає самостійно вводити дані з клавіатури ПЕОМ (N=9). Тоді він повинен створити власну процедуру обробки переривань від клавіатури (наприклад, Userint9), зберегти серед своїх даних системний вектор переривань від клавіатури та записати свій у таблицю переривань. ЦІ дії можна виконати, наприклад, наступним чином:
N equ 9
xor ax,ax
mov es,ax
mov si,N*4
mov eax,es:[si]
mov syst_vec_9,eax ; збереження системного вектора
mov ax,offset userint9
mov es:[si],ax ; встановити зміщення процедури
; користувача в векторі переривань
mov ax,seg userint9
mov es:[si+2],ax ; встановити сегментну складову логічної
; адреси процедури користувача
; в векторі переривань
syst_vec_9 dd ?
По закінченню роботи своєї програми необхідно відновити системний вектор. Ці дії можуть бути виконані, наприклад, наступним чином:
mov eax,syst_vec_9
mov si,9*4
mov es:[si],eax ;відновлення системного вектора
Розглянутий приклад організації перехоплення переривань має той недолік, що "перехоплення" відбувається "за спиною" операційної системи. В результаті операційна система не повідомлена про проведене "перехоплення" і може його трактувати як пошкодження таблиці векторів переривань з примусовим відновленням "правильного" вектора. Щоб цього не сталось, в MS-DOS реалізовані спеціальні функції для отримання вектора переривань (функція 35h) та встановлення вектора переривань (функція 25h). За допомогою цих функцій MS-DOS веде облік "перехоплених" переривань. Приклад використання таких функцій (з детальними коментарями) як раз наведений в моделі багатопрограмної системи (див. процедуру Setint9), яка пропонується в даній роботі. По закінченні свого виконання програма користувача відновлює системні вектори переривань (див. процедуру Retint9).
2.3. Схеми побудови обробників переривань
При перехопленні переривань можливі наступні варіанти організації процедури користувача та її взаємодії з системною процедурою:
1) системна процедура обробки переривань не використовується, а процедура користувача повністю бере на себе всі дії по обслуговуванню зовнішнього пристрою.
До таких дій належать подання на зовнішній пристрій необхідних команд управління для проведення та завершення сеансу зв'язку, що потребує вивчення алгоритму функціонування зовнішнього пристрою. Крім того, на контролер переривань необхідно подати команду розблокування переривань поточного та нижчого пріоритетів.
2) за цим варіантом вплив процедури користувача на обробку переривань від зовнішнього пристрою мінімізується: за станом зовнішнього пристрою процедура користувача визначає, що черговий сеанс зв'язку з зовнішнім пристроєм її не стосується, а тому необхідно передати управління системній процедурі обробки переривання від даного зовнішнього пристрою.
3) цей варіант характеризується як безумовним виконанням системної процедури обробки переривань, так і безумовним виконанням досить складної користувацької процедури.
Прикладом може бути організація прикладної обробки переривань від таймера. Але відключення системної процедури обробки переривань від таймера може призвести до збоїв в роботі операційної системи. Крім того, системна процедура повинна виконуватись в першу чергу, щоб унеможливити потенційний вплив користувацької процедури на періодичність ініціалізації системної процедури. Таким чином, у даному випадку системна процедура повинна бути негайно викликана із користувацької процедури з поверненням по команді IRET із системної процедури в користувацьку. При цьому системна процедура виконає всі стандартні дії із відповідними зовнішніми пристроями, включаючи контролер переривань, а процедурі користувача залишиться виконання лише своїх особливих функцій.
2.4. Ознайомлення з прикладом організації обробки переривань від клавіатури
Таким чином, на практиці програма, що має здійснювати обробку натиснень клавіш клавіатури, повинна реалізовувати декілька базових кроків: 1) встановлення власного обробника переривань (процедури userint9) замість системного (виклик процедури setint9), а попередньо збереження адреси системного обробника переривань в змінній int9ptr) та 2) повернення адреси системного обробника після завершення обробки (виклик процедури retint9).
Фактично така структура основної частини програми є самодостатньою, але задля забезпечення тривалої роботи програми між цими діями буде знаходитись запуск деякої фонової задачі (процедури fon), що буде виконуватись “паралельно” з обробником до моменту виходу з нього при натисненні клавіші, що визначена як сигнал до завершення роботи.
Запропонована у лабораторній роботі програмна модель має наступні основні складові: основну програму (розташована наприкінці, починається з мітки begin – точки входу в програму) і процедуру обробки переривань від клавіатури userint9. Модель містить також вищезгадані процедури setint9 і retint9 для встановлення векторів обробки переривань і фонову процедуру fon. Виконання процедури fon переривається при натисканні клавіш F1, F2, Esc, і управління передається обробнику userint9. Після обробки натискання клавіш F1, F2 управління повертається в перервану процедуру fon. Обробка натискання клавіші Esc призводить до завершення роботи програми.
Для перевірки і демонстрації коректності роботи моделі пропонується виведення на екран тестових даних шляхом прямого програмування відеопам’яті (процедура show), і фарбування екрану та тексту відповідним кольором (процедура fill).
Нижче наводиться запропонований приклад – модель програми організації обробки переривань від клавіатури
;===========================================================================
;Програма виконує зафарбовування супроводжуючого тексту червоним та синім кольором при натисненні відповідно клавіш F1 та F2 і забезпечує вихід з програми при натисненні клавіші Esc
;===========================================================================
esc_key equ 01h ;скан-код клавіші Esc
F1_key equ 3Bh ;клавіша F1
F2_key equ 3Ch ;клавіша F2

RED equ 0CEh ;коди кольорів
BLUE equ 0B9h
GREEN equ 0A5h
_ST SEGMENT para STACK 'stack' ;use16
dw 32000 dup (?)
_ST ENDS
_DATA SEGMENT para 'DATA' ;use16
msg db 'Press:',10,13 ;текст повідомлення
db 'ESC - for exit.',10,13
db 'F1 - fill by red color.',10,13
db 'F2 - fill by blue color.',10,13,'$'
_DATA ENDS
_TEXT SEGMENT para 'CODE' ;use16
ASSUME CS:_TEXT,DS:_DATA,SS:_ST
setint9 PROC
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; процедура "перехоплення" переривання від клавіатури і встановлення вектора ; переривань прикладного обробника
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MOV AH,35H ;отримати вектор переривання
MOV AL,9 ;переривання від клавіатури (9) N=9
INT 21H ;значення, що повертається:
;es:bx - вказівник на системну процедуру
;обробки переривання від клавіатури
mov cs:int9ptr,bx ; зберегти в сегменті кодів вказівник
mov cs:int9ptr+2,es ; на системну процедуру
mov dx,offset userint9
push ds
push cs ;ds:dx - вказівник на процедуру користувача
pop ds ;оброб. переривання від клавіатури
MOV AH,25H ; встановити вектор "перехоплення"
MOV AL,9 ; переривання від клавіатури (9) N=9
INT 21H
pop ds
ret
int9ptr dw 2 dup (?)
setint9 ENDP
retint9 PROC
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; процедура відновлення попереднього (системного)
; вектора переривання від клавіатури
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
push ds
push dx
mov dx,cs:int9ptr ; ds:dx - вказівник на початкову (системну)
mov ax,cs:int9ptr+2 ; процедуру обробки переривання від
mov ds,ax ; клавіатури

MOV AH,25H ; встановити вектор системної процедури
MOV AL,9 ; обробки переривання від клавіатури
INT 21H ;
pop dx
pop ds
ret
retint9 ENDP
userint9 proc far
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Процедура обробки переривань від клавіатури,
; викликається при будь-якому натисканні або відтисканні клавіш клавіатури,
; здійснює повернення в MS-DOS після натискання клавіші Esc
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pushf
call dword ptr cs:int9ptr ;виклик основного обработчика
;преривання клавіатури
;(для занесення символу в буфер)
pushad
; читання порту клавіатури
in al,60h ;введення скан-коду клавіші - розряди 0-6
mov ah,al ;7-ий розряд дорівнює 0 при натисканні
push ax ;скан-код клавіші
push 3832 ;позиція виводу
call show ;виведення скан-коду на екран

cmp ah,esc_key ;якщо натиснуто Еsc
je short ui9020 ;вихід з програми
cmp ah,F1_key ;натиснуто F1
je short ui_F1
cmp ah,F2_key ;натиснуто F2
je short ui_F2
jmp ui9040
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ui9020:
call retint9 ;повернення системного вектора переривання
mov ax,4c00h ;вихід з програми
int 21h
; або при використанні cycle в якості фонової процедури:
;ui9020:
;mov cs:cont,1;
;jmp ui9040;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ui_F1: ; виводення для контролю посередині екрану ; ASCII коду символів
push '01' ; букви "F" та цифри "1"
push 2000 ; у 16-вому коді
call show

push RED ; фарбування відповідно екрану і тексту
call fill
jmp short ui9040
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ui_F2: ; виводення для контролю посередині екрану
push '02' ; ASCII коду символів
push 2160 ; букви "F" та цифри "1"
call show ; у 16-вому коді

push BLUE ; фарбування відповідно екрану і тексту
call fill
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ui9040:
popad
iret ; закінчення обробки переривання
userint9 endp
show proc near
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;процедура виведення коду натиснутої клавіші
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
push bp
mov bp,sp
pusha
push es
mov ax,0b800h ;константа віеопам'яті
mov es,ax
std ;запис відбудеться справа-наліво
ls20:
mov di,[bp+4] ;точка виводу
mov bx,[bp+6] ;те, що ми виводимо в 16-му коді
mov cx,4
mov ah,0ah ;зелений колір символу,чорний - фону
ls40:
mov al,bl ;обробка молодшого байту символу
and al,00001111b ;виділили молодшу тетраду(число від 0 до 15)
cmp al,10 ;чи число більше за 10
jl ls100 ;якщо менше – просто виводимо
add al,7 ;якщо літера то виводимо як символ літери
ls100:
add al,30h ;оскільки скан-коди цифр починаються з 30h
stosw ;зберігаємо за адресою es:di значення ax
shr bx,4 ;наступна тетрада
loop ls40
pop es
popa
pop bp
ret 4
show endp
fill proc near
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;процедура зміни атрибутів кольору тексту на екрані
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
push bp
mov bp,sp
pushad
push es
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
push 0b800h
pop es

mov ax,[bp+4] ;атрибути кольору
cld ;заповнення атрибутів йде зліва-направо
xor di,di
@go:
inc di
stosb ;запис за адресою es:di значення al
cmp di,4000 ;доки не опрацьовано весь екран=80*25*2
jl @go
pop es
popad
pop bp
ret 2
fill endp
;- - - - - - - - - - - - - Початок роботи програми - - - - - - - - - - - - -
begin:
mov ax,_data
mov ds,ax
mov ax,3 ;завдання текстового режиму 80 на 25
int 10h
mov ah,10h ;відключення режиму миготіння
mov al,3
mov bl,0
int 10h
mov ah,09h ;виведення повідомлення msg
mov dx,offset msg
int 21h
cli ; заборона переривань
call setint9 ;"перехоплення" int9
sti ;дозвіл переривань
push GREEN ;початкові установки вигляду екрану(зелений)
call fill
call fon ;запуск фонової процедури (див. текст нижче)

cli
call retint9 ;відновлення системного вектора переривань
sti
mov ax,4c00h ;вихід з програми
int 21h
_TEXT ENDS
end begin
В якості фонових процедур можуть бути використані наступні два альтернативні приклади.
Приклад 1.Cycle.
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Виконується нескінченний цикл з виведенням на екран поточного вмісту ;регістру cx. Завершення циклу – при зміні зовні (обробником) значення ;змінної cont
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cycle proc near
mov cont,0
mov cx,0 ;деяке початкове значення лічильника
begin_fon:
add cx,1h ;зміна сх
push cx ;виведення на екран стану регістра сх
push 310
call show
mov al,cs:cont
and al,1 ;зациклювання
je begin_fon
finish:
mov ah,2
int 21h
ret
cont db ? ; cont - змінна нескінченного циклу
cycle endp
Приклад 2.Print_text.
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;Процедура, що виводить на екран символьне позначення клавіш (окрім ;функціональних)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
print_text proc near
printing:
mov ah,10h ;зчитування скан-коду натиснутої клавіші
int 16h

or al,al ;якщо символ функціональний, то не обробляємо
je printing ;його цією процедурою

mov dl,al ;якщо це літера, цифра, тощо
mov ah,02h ;виводимо символ
int 21h
jmp printing
@exit:
ret
print_text endp
2.5. Виведення на екран шляхом прямого програмування відеопам’яті
Одним із архітектурних рішень в ПЕОМ є розміщення відеопам’яті відеоконтролера в адресному просторі процесора. Відеоконтролер читає дані з відеопам'яті, на основі цих даних формує сигнали управління відеомонітором для відображення одного кадру на екрані. На протязі однієї секунди сучасні відеоконтролери та відеомонітори забезпечують виконання біля 100 циклів формування кадру. (Необхідно зауважити, що в телевізорах за одну секунду формується 50 (або 60) кадрів, а в кіно - 25.) Розміщення відеопамяті в адресному просторі процесора дає можливість читати та записувати в неї дані на програмному рівні "одночасно" з читанням даних відеоконтролером, тобто формувати зображення в кадрах на програмному рівні. Враховуючи значний прогрес в швидкодії сучасних процесорів, ефект анімації сповна можна забезпечити програмним шляхом.
Режими роботи відеоконтролера розділяють на графічні та текстові. Найменшу неподільну область, відображення якої на екрані забезпечує апаратура, називають пікселем. В графічних режимах кожному пікселю відповідає один (два, три і т.д.) байта відеопамяті, які кодують колір пікселя. В текстових режимах використовується поняття знакомісця - прямокутної області екрану, яка призначена для виведення символу тексту. Розмір знакомісця задається в пікселях, наприклад, 8(8. Використання знакомісця дозволяє зберігати в відеопамяті не коди пікселів, а коди символів тексту, що суттєво зменшує необхідний розмір пам'яті. Перетворення кодів символів в сукупність кодів пікселів виконується апаратно за допомогою таблиць кодування, які розміщуються в пам'яті окремо.
Для управління режимами роботи вiдеоконтролера ПЕОМ використовують програмне переривання BIOS int 10h. Для завдання найбільш уживаного текстового режиму 80(25 (де 80 - максимальна кількість символів в одному рядку екрану, 25 - максимальна кількість рядків), використовують послідовність команд:
mov ax, 3
int 10h
В даному режимі в пам'яті ПЕОМ відводиться 8 вiдеосторiнок по 4Кбайти кожна, починаючи з фізичної адреси 0b8000h. Для відображення вiдеосторiнки на екрані необхідно задати команду int 10h зі значенням ah=5, al=номер вiдеосторiнки. Фізична адреса відеосторінки А вс за її номером N визначається згідно формули:
А вс = b8000h + N(1000h
Для кожного символу, який відображається на екрані, у вiдеосторiнцi відводиться два байти - байт ASCII коду символу і байт атрибутів. Так, наприклад, зміщення в відеосторінці коду ASCII символу, відображеного на екрані в рядку Nrow (Nrow = 0,1,...,24) та колонці Ncolumn (Ncolumn =0,1,2,...,79) в режимі 80(25 обчислюється згідно формули:
Nrow (80(2 + Ncolumn ( 2
Рядки нумеруються, починаючи з верхнього, а колонки - починаючи з крайньої лівої. Байт атрибутів має зміщення на 1 більше. Старша половина байта атрибутів (старша тетрада) визначає колір фону, молодша - колір символу. Колір формується шляхом комбінації трьох основних кольорів - червоного, зеленого та синього (RGB). Наявність синього кольору задається 1 в молодшому біті тетради, наступний біт задає зелений колір, а за ним - біт червоного кольору. Старший біт тетради символу задає інтенсивність. Старший біт тетради фону задає режим миготіння. Для заміни миготіння на інтенсивність і використання 16 кольорів фону необхідно задати наступну команду BIOS:
mov ah, 10h
mov al, 3
mov bl, 0
int 10h
Однотонне зафарбовування всього знакомiсця на екрані досягається або шляхом засилання коду ASCII NUL або при рівності атрибутів кольору фону i кольору символу. Для заповнення або зміни вмісту вiдеосторiнки часто використовують строковi команди (STOS, MOVS і ін.). При цьому необхідно забезпечувати правильну установку вмісту сегментних регістрів ds і es. Наприклад, в регістр es часто записують старші 16 розрядів фізичної адреси відеопамяті, тобто значення 0b800h.
В операційній системі Windows в основному використовуються графічні режими відеоконтролера, функціональні можливості яких навіть для відображення текстів значно ширші. Але при цьому суттєво зростає розмір відеосторінок і ускладнюється програмування.
3. Завдання на виконання роботи
Ознайомитися з роботою запропонованої моделі програмування обробки переривань, запустивши на виконання програму new_kl.exe і проаналізувавши її текст new_kl.asm (див. п. 2.4.).
На основі запропонованої моделі створити мовою Асемблера власну програму, дії якої відповідають варіанту завдання. Відмінності, що потрібно внести у модель, полягають у завданні певних клавіш, на які має спрацьовувати обробник переривань, різних реакціях обробника на ці події, використання різних фонових процедур. Для візуального відображення обробки подій в роботі використовується формування певного вигляду екрану шляхом прямого програмування відеопам’яті в текстовому режимі (див. п. 2.5.).
Варіанти завдань:
Заповнити 0-у сторінку відеопам’яті довільним текстом. При натисканні на F1 очистити праву половину екрану, а при натисканні на F2 - ліву половину екрану. При повторному натисканні на кнопку вміст відповідної половини екрану повинен відновлюватися. Основою для роботи програми вважати процедуру print_text.
Заповнити 0-у сторінку відеопам’яті довільним текстом. По натисканні на F3 очистити нижню половину екрану, а при натиску на F4 - верхню половину екрану. При повторному натисканні на кнопку вміст відповідної половини екрану повинен відновлюватися. Основою для роботи програми вважати процедуру print_text.
Заповнити 0-у сторінку відеопам’яті довільним текстом. По натисканні на F1 очистити непарні рядки екрану, а при натисканні на F2. При повторному натисканні на кнопки вміст відповідної частини екрану повинен відновлюватися. Основою для роботи програми вважати процедуру print_text.
Заповнити 0-у сторінку відеопам’яті довільним текстом. По натисканні на F3 очистити непарні колонки екрану, а при натисканні на F4 - парні колонки екрану. При повторному натисканні на кнопки вміст відповідної частини екрану повинен відновлюватися. Основою для роботи програми вважати процедуру print_text.
Заповнити кожну з 0-ї,1-ї,2-ї і 3-ї сторінок довільним символом, що відрізняється від інших. При натисненні F1 виводити нульову сторінку, F2 – виводити першу і.т.д. Основою для роботи програми вважати процедуру print_text.
Заповнити 0-у та 1-у відеосторінки довільним текстом. При натисненні F1 виводити нульову сторінку, F2 – відповідно першу. При натисненні F3 здійснювати інверсію атрибутів тексту. Основою для роботи програми вважати процедуру print_text.
Поставити у відповідність десятковим цифрам (0 - 9) букви латинського алфавіту. Перетворити введену із клавіатури десяткову цифру у відповідну літеру. Основою для роботи програми вважати процедуру print_text.
Поставити у відповідність десятковим цифрам (0 - 9) азбуку, подібну азбуці Морзе (див. таблицю нижче). Перетворити введену із клавіатури десяткову цифру у відповідну послідовність крапок, тире. Основою для роботи програми вважати процедуру print_text.
0
? ? ? ? ?
5
· · · · ·

1
· ? ? ? ?
6
? · · · ·

2
· · ? ? ?
7
? ? · · ·

3
· · · ? ?
8
? ? ? · ·

4
· · · · ?
9
? ? ? ? ·


Закодувати символи (@,#,$,%,&,*). Кожен виводити на екран по натисненню відповідної клавіші в окремому рядку, закріпленому лише для цього символу. Основою для роботи програми вважати процедуру print_text.
Реалізувати за допомогою клавіш управління курсору (вліво, вправо, вверx, вниз) переміщення довільного символу. Основою для роботи програми вважати процедуру cycle.
Закодувати шістнадцяткові цифри буквами російського алфавіту. Перетворити введену із клавіатури шістнадцяткову цифру на відповідну букву. Основою для роботи програми вважати процедуру print_text.
У наперед виведеному на екран тексті знайти всі входження символу, що вводиться користувачем з клавітури, і підсвітити його червоним кольором. Основою для роботи програми вважати процедуру cycle.
У наперед виведеному на екран тексті замініти всі входження символу ‘A’ на символ, введений користувачем з клавітури. Основою для роботи программи вважати процедуру print_text.
За допомогою клавіш управління курсору (вліво, вправо, вверx, вниз) реалізувати переміщення символу з певного знакомісця, змінюючи при цьому його атрибути кольору. Основою для роботи программи вважати процедуру cycle.
4. Додаток
:
ASCII-коди деяких клавіш та їх комбінацій
----------T----------T------------T-------------T---------------¬
¦01 Esc ¦12 E ¦23 H ¦34 . > ¦45 NumLock ¦
¦02 1 ! ¦13 R ¦24 J ¦35 / ? ¦46 ScrollLock¦
¦03 2 @ ¦14 T ¦25 K ¦36 Shft(прав)¦47 Home [7] ¦
¦04 3 # ¦15 Y ¦26 L ¦37 * PrtSc ¦48 Up [8] ¦
¦05 4 $ ¦16 U ¦27 ; : ¦38 Alt ¦49 PgUp [9] ¦
¦06 5 % ¦17 I ¦28 " ' ¦39 Пробел ¦4a K - ¦
¦07 6 ^ ¦18 O ¦29 ` ~ ¦3a CapsLock¦4b <- [4] ¦
¦08 7 & ¦19 P ¦2a Shft(лев)¦3b F1 ¦4c [5] ¦
¦09 8 * ¦1a [ { ¦2b \ | ¦3c F2 ¦4d -> [6] ¦
¦0a 9 ( ¦1b ] } ¦2c Z ¦3d F3 ¦4e K + ¦
¦0b 0 ) ¦1c Enter¦2d X ¦3e F4 ¦4f End [1] ¦
¦0c - _ ¦1d Ctrl ¦2e C ¦3f F5 ¦50 Dn [2] ¦
¦0d + = ¦1e A ¦2f V ¦40 F6 ¦51 PgDn [3] ¦
¦0e Bksp¦1f S ¦30 B ¦41 F7 ¦52 Ins [0] ¦
¦0f Tab ¦20 D ¦31 N ¦42 F8 ¦53 Del [.] ¦
¦10 Q ¦21 F ¦32 M ¦43 F9 ¦ ¦
¦11 W ¦22 G ¦33 , < ¦44 F10 ¦ ¦
L---------¦----------¦------------¦-------------¦----------------
г--------Т--------------T--------------T-------------¬
¦ F1 3b¦ Shift-F1 54¦ Ctrl-F1 5e ¦ Alt-F1 68 ¦
¦ F2 3c¦ Shift-F2 55¦ Ctrl-F2 5f ¦ Alt-F2 69 ¦
¦ F3 3d¦ Shift-F3 56¦ Ctrl-F3 60 ¦ Alt-F3 6a ¦
¦ F4 3e¦ Shift-F4 57¦ Ctrl-F4 61 ¦ Alt-F4 6b ¦
¦ F5 3f¦ Shift-F5 58¦ Ctrl-F5 62 ¦ Alt-F5 6c ¦
¦ F6 40¦ Shift-F6 59¦ Ctrl-F6 63 ¦ Alt-F6 6d ¦
¦ F7 41¦ Shift-F7 5a¦ Ctrl-F7 64 ¦ Alt-F7 6e ¦
¦ F8 42¦ Shift-F8 5b¦ Ctrl-F8 65 ¦ Alt-F8 6f ¦
¦ F9 43¦ Shift-F9 5c¦ Ctrl-F9 66 ¦ Alt-F9 70 ¦
¦ F10 44¦ Shift-F10 5d¦ Ctrl-F10 67 ¦ Alt-F10 71 ¦
L--------¦--------------¦--------------¦--------------
г----------T----------T-------------T-------------¬
¦ Alt-A 1e¦ Alt-P 19¦ Alt-3 7a¦ Down Dn 50¦
¦ Alt-B 30¦ Alt-Q 10¦ Alt-4 7b¦ Left <- 4b¦
¦ Alt-C 2e¦ Alt-R 13¦ Alt-5 7c¦ Right -> 4d¦
¦ Alt-D 20¦ Alt-S 1f¦ Alt-6 7d¦ Up Up 48¦
¦ Alt-E 12¦ Alt-T 14¦ Alt-7 7e¦ End 4f¦
¦ Alt-F 21¦ Alt-U 16¦ Alt-8 7f¦ Home 47¦
¦ Alt-G 22¦ Alt-V 2f¦ Alt-9 80¦ PgDn 51¦
¦ Alt-H 23¦ Alt-W 11¦ Alt-- 82¦ PgUp 49¦
¦ Alt-I 17¦ Alt-X 2d¦ Alt-= 83¦ ¦
¦ Alt-J 24¦ Alt-Y 15¦ ¦ ^Left 73¦
¦ Alt-K 25¦ Alt-Z 2c¦ ¦ ^Right 74¦
¦ Alt-L 26¦ ¦ Shift-Tab 0f¦ ^End 75¦
¦ Alt-M 32¦ Alt-0 81¦ Ins 52¦ ^Home 77¦
¦ Alt-N 31¦ Alt-1 78¦ Del 53¦ ^PgDn 76¦
¦ Alt-O 18¦ Alt-2 79¦ ^PrtSc 72¦ ^PgUp 84¦
L----------¦----------¦-------------¦--------------
5. Інформаційні матеріали
Лекції з дисципліни “Системне програмування”
Пряма робота з вiдеопам’яттю, (наприклад, кн. С. В. Зубков. ASSEMBLER М. 1999, п.4.3.3. Прямая работа с видеопамятью. с.149-150)
посібник з мови Асемблера, (наприклад, кн. ASSEMBLER. Учебный курс. В.Юров, С.Хорошенко,Санкт-Петербург,1999,Урок 15, Прерывания. стор.377-406);