Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра САПР
Розрахунково-графічна робота
Виконав:
студент групи КН-24
Прийняв:
Мазур В. В.
Львів – 2007
Варіант № 9
Теоретичне завдання №1
Програмні переривання (застосування на прикладах)
Переривання є операцією, яка припиняє виконання програм для спеціальних системних дій. Необхідність переривань обумовлено двома основними причинами: навмисний запит таких дій, як операції введення-виводу на різні пристрої і непередбачені програмні помилки (наприклад, переповнювання при діленні). Система BIOS (Basic Input/Output System) знаходиться в ROM і управляє всіма перериваннями в системі.
У комп'ютерах IBM РС ROM знаходиться за адресою FFFF0H. При включенні комп'ютера процесор встановлює стан скидання, виконує контроль
парності, встановлює в регістрі CS значення FFFFH, а в регістрі IP - нуль. Перша виконувана команда тому знаходиться за адресою FFFF:0 або FFFF0, що є точкою входу в BIOS. BIOS перевіряє різні порти комп'ютера для визначення і ініціалізації підключених пристроїв. Потім BIOS створює на початку пам'яті (за адресою 0) таблицю переривань, яка містить адреси обробників переривань, і виконує дві операції INT 11H (запит списку приєднаного устаткування) і INT 12H (запит розміру фізичної пам'яті).
Наступним кроком BIOS – це визначення чи є на диску або дискеті операційна система DOS. Якщо виявлена системна дискета, то BIOS виконує переривання INT 19H для доступу до першого сектора диска, що містить блок початкового завантаження. Цей блок є програмою, яка зчитує системні файли IBMBIO.COM, IBMDOS.COM і COMMAND.COM з диска в пам'ять. Після цього пам'ять має наступний розподіл:
Таблиця векторів переривань
Дані BIOS
IBMBIO.COM і IBMDOS.COM
Резидентна частина COMMAND.COM
Доступна пам'ять для прикладних програм
Транзитна частина COMMAND.COM
Кінець RAM (ОЗУ)
ROM BASIC
ROM BIOS
Зовнішні пристрої передають сигнал уваги через контакт INTR в процесор. Процесор реагує на цей запит, якщо прапор переривання IF встановлений в 1 (переривання дозволене), і (в більшості випадків) ігнорує запит, якщо прапор IF встановлений в 0 (переривання заборонене).
Операнд в команді переривання, наприклад, INT 12H, містить тип переривання, який ідентифікує запит. Для кожного типу система містить адресу в таблиці векторів переривань, що починається за адресою 0000. Оскільки в таблиці є 256 чотирьохбайтових елементів, то вона займає перші 1024 байти пам'яті від шестизначного 0 до шестизначного 3FF. Кожен елемент таблиці указує на підпрограму обробки вказаного типу переривання і містить адресу кодового сегменту і зсув, які при перериванні встановлюються у регістри CS і IP відповідно.
Переривання заносить в стек вміст регістра прапора, регістра CS і регістра IP. Наприклад, для переривання 12H (яке повертає в регістрі AX розмір пам'яті) адреса елементу таблиці рівна шестизначному 0048 (шестизначне 12 х 4 =
шестизначне 48). Операція виділяє чотирьохбайтовий елемент за адресою шестизначного 0048 і заносить два байти в регістр IP і два байти в регістр SS. Адреса, яка виходить в регістровій парі CS:IP, є адресою початку підпрограми в області BIOS, яка отримує управління. Повернення з цієї підпрограми здійснюється командою IRET (Interrupt Return), яка відновлює прапори і регістри CS і IP із стека і передає управління на команду, наступну за виконаною командою переривання.
Адреса Функція переривань
(шестизначна) (шестизначна.)
0-3 0 Ділення на нуль
4-7 1 Покроковий режим (трасування DEBUG)
8-B 2 Немасковане переривання (NMI)
C-F 3 Точка зупинки (використовується в DEBUG)
10-13 4 Переповнювання регістра
14-17 5 Друк екрану
18-1F 6,7 Зарезервоване
20-23 8 Сигнал від таймера
24-27 9 Сигнал від клавіатури
28-37 A,B,C,D Використовуються в комп'ютерах AT
38-3B E Сигнал від дискетного дисковода
3C-3F F Використовується для принтера
40-43 10 Управління дисплеєм
44-47 11 Запит устаткування
48-4B 12 Запит розміру пам'яті
4C-4F 13 Дискові операції введення-виводу
50-53 14 Управління комунікаційним адаптером
54-57 15 Касетні операції і спеціальні функції AT
58-5B 16 Введення з клавіатури
5C-5F 17 Вивід на принтер
60-63 18 Звернення до BASIC, вбудованому в ROM
64-67 19 Перезапуск системи
68-6B 1A Запиту і установка часу і дати
6C-6F 1B Переривання від клавіатури
70-73 1C Переривання від таймера
74-77 1D Адреси таблиці параметрів дисплея
78-7B 1E Адреси таблиці параметрів дисковода
7C-7F 1F Адреси таблиці графічних символів
80-83 20 Нормальне завершення програми (DOS)
84-87 21 Звернення до функцій DOS
88-8B 22 Адреса обробки завершення завдання (DOS)
8C-8F 23 Адреса реакції по Ctrl/Break (DOS)
90-93 24 Адреса реакції на фатальну помилку (DOS)
94-97 25 Абсолютне читання з диска (DOS)
98-9B 26 Абсолютний запис на диск (DOS)
97-9F 27 Створення резидентної програми (DOS)
AO-FF 28-3F Інші функції DOS
100-1FF 40-7F Зарезервоване
200-217 80-85 Зарезервовано для BASIC
218-3C3 86-F0 Використовуються BASIC-інтерпретатором
3C4-3FF F1-FF Зарезервоване
INT 05H. Друк екрану. Виконує виведення вмісту екрану на друкуючий пристрій. Команда INT 05H виконує дану операцію з програми, а натиснення клавішею Ctrl/PrtSc - з клавіатури. Операція забороняє переривання і зберігає позицію курсора.
INT 10H. Управління дисплеєм. Забезпечує екранні і клавіатурні операції.
INT 11H. Запит списку приєднаного устаткування. Визначає наявність різних пристроїв в системі результуюче значення повертає в регістрі AX. При включенні комп'ютера система виконує цю операцію і зберігає вміст AX в пам'яті по адресі шест.410. Значення бітів в регістрі AX:
Біт Пристрій
15,14 Число підключених принтерів.
13 Послідовний принтер.
12 Ігровий адаптер.
11-9 Число послідовних адаптерів стику RS232.
7,6 Число діськетних дисководів, при біті 0=1:
00=1, 01=2, 10=3 і 11=4.
5,4 Початковий відео режим:
00 = не використовується
01 = 40х25 плюс колір
10 = 80х25 плюс колір
11 = 80х25 чорно-білий режим.
1 Значення 1 говорить про наявність співпроцесора.
0 Значення 1 говорить про наявність одного або більш дискових пристроїв і завантаження операційної системи.
INT 12H Зпит про розміру фізичної пам'яті.
Повертає в регістрі AX розмір пам'яті в кілобайтах, наприклад, шест.200 відповідає пам'яті в 512 До. Дана операція корисна для вирівнювання розміру програми відповідно до доступної пам'яті.
INT 13H. Дискові операції введення-виводу. Забезпечує операції введення-виводу для дискет і вінчестера.
INT 14H. Управління комутаційним адаптером. Забезпечує послідовне уведення-виведення через комунікаційний порт RS232. Регістр DX повинен містити номер (0 або 1) адаптера стику RS232. Чотири типи операції, визначувані регістром AH виконують прийом і передачу символів і повертають в регістрі AX байт стани комунікаційного порту.
INT 15H. Касетні операції введення-виводу і спеціальні функції для комп'ютерів AT. Забезпечує операції введення-виводу для касетного магнітофона, а також розширені операції для комп'ютерів AT.
INT 16H. Уведення з клавіатури. Забезпечує три типи команд введення з клавіатури, детально описані в
гл.9.
INT 17H. Вивід на принтер. Забезпечує виведення даних на друкуючий пристрій.
INT 18H. Звернення до BASIC, вбудованому в ROM. Викликає BASIC-інтерпретатор, що знаходиться в постійній пам'яті ROM.
INT 19H. Перезапуск системи. Дана операція при доступному диску прочитує сектор 1 з доріжки 0 в область початкової завантаження в пам'яті (сегмент 0, зсув 7C00) і передає управління по цій адресі. Якщо дисковод не доступний, то операція передає управління через INT 18H в ROM BASIC. Дана операція не очищає екран і не ініціалізував дані в ROM BASIC, тому її можна використовувати з програми.
INT 1AH. Запит і встановлення поточного часу і дати. Прочитує і записує свідчення годинника в відповідності із значенням в регістрі AH. Для визначення тривалості виконання програми можна перед початком виконання встановити годинник в 0, а після рахувати поточний час. Відлік часу йде приблизно 18,2 разу в секунду. Значення в регістрі AH відповідає наступним операціям:
INT 1FH. Адреса таблиці графічних символів. У графічному режимі є доступ до символів з кодами 128-255 в 1К таблиці, що містить по вісім байт на кожен символ. Прямій доступ в графічному режимі забезпечується тільки до перших 128 ASCII-символам (від 0 до 127).
Нижче приведені найбільш основні з переривань DOS:
INT 20H. Завершення програми. Запит завершує виконання програми і передає управління в DOS. Даний запит зазвичай знаходиться в основній процедурі.
INT 21H. Запит функцій DOS. Основна операція DOS що викликає певну функцію відповідно до коду в регістрі AH. Призначення функцій DOS описане в наступному розділі.
INT 22H. Адреса підпрограми обробки завершення завдання.
INT 23H. Адреса підпрограми реакції на Ctrl/Break.
INT 24H. Адреса підпрограми реакції на фатальну помилку. У цьому елементі і в двох попередніх містяться адреси, які ініціалізувалися системою в префіксі програмного сегменту і, які можна змінити для своїх цілей.
INT 25H. А Абсолютне читання з диску.
INT 26H. Абсолютний запис на диск.
INT 27H. Завершення програми, залишаючи її, резидетною. Дозволяє зберегти COM-програму в пам'яті.
Як приклад я наведу функції переривання DOS INT 21H. Нижче приведені базові функції для переривання DOS INT 21H. Код функції встановлюється в регістрі AH:
00 Завершення програми (аналогічно INT 20H).
01 Введення символу з клавіатури з луною на екран.
02 Виведення символу на екран.
03 Введення символу з асинхронного комунікаційного каналу.
04 Виведення символу на асинхронний комунікаційний канал.
05 Виведення символу на друк.
06 Пряме введення з клавіатури і вивід на екран.
07 Введення з клавіатури без луни і без перевірки Ctrl/Break.
08 Введення з клавіатури без луни з перевіркою Ctrl/Break.
09 Виведення рядка символів на екран.
0А Введення з клавіатури з буферизацією.
0В Перевірки наявності введення з клавіатури.
0С Очищення буфера введення з клавіатури і запит на введення.
0D Скидання диска.
0Е Установки поточного дисковода.
0F Відкриття файлу через FCB.
10 Закриття файлу через FCB.
11 Початковий пошук файлу за шаблоном.
12 Пошук наступного файлу за шаблоном.
13 Видалення файлу з диска.
14 Послідовне читання файлу.
15 Послідовний запис файлу.
16 Створення файлу.
17 Перейменування файлу.
18 Внутрішня операція DOS.
19 Визначення поточного дисковода.
1А Установки області передачі даних (DTA).
1В Отримання таблиці FAT для поточного дисковода.
1С Отримання FAT для будь-якого дисковода.
21 Читання з диска з прямим доступом.
22 Запис на диск з прямим доступом.
23 Визначення розміру файлу.
24 Установка номера запису для прямого доступу.
25 Установка вектора переривання.
26 Створення програмного сегменту.
27 Читання блоку записів з прямим доступом.
28 Запис блоку з прямим доступом.
29 Перетворення імені файлу у внутрішні параметри.
2А Отримання дати (CX-рік, DН-місяць ,DL-день).
2В Установки дати.
2С Отримання часу (CH-час,CL-мин,DН-с,DL-1/100с).
2D Установки часу.
2Е Установки/відміни верифікації запису на диск.
Наступні розширені функції можливі в DOS починаючи з версії 2.0:
2F Отримання адреси DTA в регістровій парі ES:BX.
30 Отримання номера версії DOS в регістрі АХ.
31 Завершення програми, після якого вона залишається резидентною в пам'яті.
33 Перевірка Ctrl/Break.
35 Отримання вектора переривання (адреси підпрограми).
36 Отримання розміру вільного простору на диску.
38 Отримання державно залежних форматів.
39 Створення підкаталогу (команда MKDIR).
ЗА Видалення підкаталогу (команда RMDIR).
3В Установки поточного каталога (команда CHDIR).
3C Створення файлу без використання FCB.
3D Відкриття файлу без використання FCB.
3E Закриття файлу без використання FCB.
3F Читання з файлу або введення з пристрою.
40 Запис у файл або вивід на пристрій.
41 Видалення файлу з каталога.
42 Установка позиції для послідовного доступу.
43 Зміна атрибутів файлу.
44 Управління введенням-виводом для різних пристроїв.
45 Дублювання файлового номера.
46 "Склеювання" дубльованих файлових номерів.
47 Отримання поточного каталога.
48 Виділення пам'яті з вільного простору.
49 Звільнень виділеної пам'яті.
4А Зміни довжини блоку виділеної пам'яті.
4В Завантаження/виконання програми (підпроцесу).
4С Завершення підпроцесу з поверненням управління.
4D Отримання коду завершення підпроцесу.
4Е Початковий пошук файлу за шаблоном.
4F Пошуку наступного файлу за шаблоном.
54 Отримання стану верифікації.
56 Перейменування файлу.
57 Отримання/установка дати і часу зміни файлу.
Теоретичне завдання №2
Робота з годинником реального часу
Починаючи з IBM PC, персональні комп’ютери мають два пристрої для роботи з процесорами – годинник реального часу (RTC) і сам системний таймер. Годинник реального часу отримує живлення від акумулятора на материнській платі і працює навіть тоді, коли комп’ютер вимкнений. Цей пристрій можна використовувати для визначення/встановлення поточних дати і часу, встановлення будильника з ціллю виконання яких-небудь дій і для викликання переривання IRQ8 (INT 4Аh) кожну мілісекунду. Системний таймер використовується одночасно для управління контролером прямого доступу до пам’яті, для управління динаміком і як генератор імпульсів, що викликає переривання IRQ0 (INT 8h) 18,2 рази в секунду. Таймер надає багаті можливості для програмування на рівні портів вводу-виводу, але на рівні DOS і BIOS і годинник реального часу, і системний таймер використовується тільки як засіб визначення/встановлення поточного часу і організації затримок.
Функція DOS 2Сh – Визначити час
Ввід: AX = 2Ch
Вивід: CH = година
CL = хвилина
DH = секунда
DL = сота доля секунди
Ця функція використовує системний таймер, так що година змінюється тільки 18,2 рази в секунду і число в DL збільшується зразу на 5 чи 6.
Функція DOS 2Dh – Встановити час
Ввід: AH = 2Dh
CH = година
CL = хвилина
DH = секунда
DL = сота доля секунди
Вивід: AL = FFh, якщо введено неіснуючий час,
AL = 00h, якщо час встановлений
Функція 2Dh встановлює одночасно як внутрішній годинник DOS, які управляють системним таймером і обновляються 18,2 рази в секунду, так і годинником реального часу.
Задача №1
Написати і оформити згідно вимог програму на Асемблері для рисування вказаним кольором прямокутника заданого розміру у певній точці екрану (задані координати лівої верхньої вершини) з використанням циклів.
Ширина 35
Висота 20
Колір 14
X 90
Y 60
Текст програми
title Zavd1
sseg segment stack
db 100h dup(0)
sseg ends
dseg segment 'data'
er db 'Error !!!!!!!!!!$'
s2 db 'sd$'
dseg ends
code segment 'code'
assume ss:sseg,ds:dseg,cs:code
jmp main
main proc far
mov ax,dseg
mov ds,ax
mov ah,0Fh
int 10h
push ax
call vgaint
call rac
mov ah,10h
int 16h
pop ax
mov ah,00h
int 10h
ex: mov ax,4c00h
int 21h
error: mov ah,09h
mov dx,offset er
int 21h
jmp ex
main endp
vgaint proc near
mov ah,00h
mov al,12h
int 10h
mov ah,0bh
mov bx,00001h
int 10h
ret
vgaint endp
rac proc near
mov cx,20
c1: mov ah,0ch
mov bh,0
mov dx,60
mov al,14h
int 10h
mov dx,140
int 10h
inc cx
cmp cx,90
jne c1
mov dx,60
c2: mov ah,0ch
mov bh,0
mov cx,20
mov al,14h
int 10h
mov cx,90
int 10h
inc dx
cmp dx,140
jne c2
ret
rac endp
code ends
end
Задача №2
Написати програму перекодування тексту (малі букви у великі).
;=====Made by Roman Zarichnyi=====
title case Zavdannja2
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
Start:
call main
mov ah,9
mov dx,offset radok
int 21h
main proc
lea bx,radok
mov cx,16
sv1:
mov ah,[bx]
cmp ah,61h
jb sv2
cmp ah,7Ah
ja sv2
and ah,11011111b
mov [bx],ah
sv2:
inc bx
loop sv1
ret
radok db 'My name is Roman$'
main endp
CSEG ends
end Start