Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра електронних
обчислювальних машин
Звіт
про виконання лабораторної роботи № 5
з курсу „ Системне програмування ”
Тема: Організація переривань у IBM PC .
Львів – 2004
Мета роботи: Знайомство з механізмом переривань,
оволодіння навичками їх обробки.
Короткі теоретичні відомості
Механізм і типи переривань.
Для обробки подiй, що вiдбуваються асинхронно стосовно виконання програми, найкраще пiдходить механiзм переривань. Переривання можна розглядати як деяку особливу подiю в системi, що потребує моментальної реакцiї. Наприклад, добре спроектованi системи пiдвищеної надiйностi використовують переривання по аварiї в мережi живлення для виконання процедур запису вмiсту регiстрiв i оперативної пам'ятi на магнiтний носiй, iз тим щоб пiсля вiдновлення живлення можна було б продовжити роботу з того ж мiсця.
Оскiльки переривання можуть виникати за рiзноманiтними причинами, кожному перериванню присвоюється номер переривання, з яким зв'язується та або iнша подiя. Система в разi надходження тої чи iншої подiї запускає вiдповiдну процедуру реакцiї на подiю.
За джерелом i характером виникнення переривання роздiляються на групи (Рис. 1):
Переривання
Апаратнi
Програмнi
Зовнiшнi
Внутрiшнi
Маскованi
Немаскованi
Рис. 1.
Програмнi переривання викликаються самими програмами, тому вони не є асинхронними. Для цього вони використовують команду INT.
Програмнi переривання зручно використовувати для органiзацiї доступу до окремих спiльних для всiх програм модулiв. Наприклад, програмнi модулi операцiйної системи доступнi прикладним програмам саме через переривання, i немає необхiдностi при виклику цих модулiв знати їхню поточну адресу в пам'ятi. Прикладнi програми самi можуть встановлювати свої обробникi переривань для їхнього наступного використання iншими програмами. Для цього обробникi переривань, що вбудовуються, повиннi бути резидентними в пам'ятi.
Апаратнi переривання викликаються фiзичними пристроями i надходять асинхронно. Цi переривання iнформують систему про подiї, пов'язанi iз роботою пристроїв, наприклад, про те, що завершено друк символу на принтерi i можна видати наступний символ, або про те, що потрiбний сектор диска вже прочитано i його вмiст доступний програмi.
Використання переривань при роботi з повiльними зовнiшнiми пристроями дозволяє сполучити ввiд/вивiд з обробкою даних в центральному процесорi i в результатi пiдвищує загальну продуктивнiсть системи.
Зовнiшнi апаратнi переривання викликаються сигналами, зовнiшнiми стосовно цетрального процесора, i подаються на його входи INT i NMI.
Переривання по входi INT вiдносяться до апаратних маскованих переривань, оскiльки можуть бути дозволенi або забороненi прапором IF регiстра прапорiв. Номер вектора переривань, що маскуються, передається до процесора по його вiсьми молодших розрядах шини даних.
Вхiд немаскованого переривання NMI звичайно використовується для повiдомлень про "катастрофiчнi" подiї (вiдключення живлення, виявлення помилок пам'ятi i т.д.). Номер цього переривання дорiвнює 2.
Внутрiшнi (логiчнi) переривання формуються безпосередньо процесором, коли виникає така особлива ситуацiя, як, наприклад, дiлення на 0. Цi переривання мають номери 0, 1, 3, 4 (див. табл.1).
Завдання на лабораторну роботу
1. Створити програму, що виконує функцiї транзитного обробника одного iз зарезервованих для користувача переривань i реалiзує вказаний викладачем варiант завдання.
2. Запустити створену програму та задокументувати результати її виконання.
Варіант 9.
Визначити тип мікропроцесора і тип ПЕОМ;
перевірити, чи акумулятор функціонує нормально
Вміст .asm-файлу
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
ProcMsg db 10,13,'Type of microprocessor: $'
P1Msg db '8086.$'
P2Msg db '80286.$'
P3Msg db '80386 or later.$'
PCMsg db 10,13,'Type of computer: $'
ATMsg db 'AT.',10,13, '$'
nonATMsg db 'non - AT.',10,13, '$'
AcumOKMsg db 'Acumulator is charged and working properly.',10,13,10,13,'$'
AcumBadMsg db 'Acumulator is not working properly!',10,13,10,13,'$'
HndlrMsg db 'New handler for CTRL+C is set.',10,13
db 'Press CTRL+C to see computer info.$'
.CODE
start: push ds
sub ax,ax
push ax ;initialize stack segment
mov ax,@data
mov ds,ax ;initialize data segment
mov ah,9h
mov dx,offset HndlrMsg
int 21h
;-----Setting new handler address
push ds ;save ds
mov ax,seg NewHandler ;set new handler address
mov ds,ax
mov ah,25h ;"set vector" function
mov al,23h ;handler ID
mov dx,offset NewHandler ;ds:dx now points to new handler
int 21h
pop ds ;restore ds
;-----EXIT
mov ah,01h
int 21h
mov ah,4Ch ;DOS terminate program function
int 21h ;terminate the program
NewHandler:
push ax
push bx
push cx
push dx
;-----Detection of microprocessor type
mov dx,OFFSET ProcMsg ;DS:DX points to the ProcMsg
mov ah,09 ;DOS string print function
int 21h ;print the ProcMsg
mov ax,0000
push ax
popf
pushf
mov ax,0000
pop ax
CMP ax,0F000h
JZ i8086
JMP else1
i8086: mov dx,OFFSET P1Msg
else1: mov ax,0F000h
push ax
popf
pushf
mov ax,0000
pop ax
CMP ax,0000
JZ i80286
mov dx,OFFSET P3Msg
JMP print1
i80286: mov dx,OFFSET P2Msg
print1: mov ah,09
int 21h
;-----Detection of PC type
mov dx,OFFSET PCMsg
mov ah,09
int 21h ;print the PCMsg
MOV ax,0F000h
MOV ds,ax ;set DS to point to F000h
MOV bx,0FFFEh
MOV dl,[bx]
mov ax,@data
mov ds,ax
CMP dl,0FCh ;Checking if PC is AT ( [F000:FFFE]=FCh ? )
JZ isAT
mov dx,OFFSET nonATMsg
JMP print2
isAT: mov dx,OFFSET ATMsg
print2: mov ah,09
int 21h
;-----Acumulator check
mov al,0Eh
OUT 70h,al
nop
IN al,71h
nop
AND al,80h
CMP al,80h
JZ Bad
mov dx,OFFSET AcumOKMsg
JMP print3
Bad: mov dx,OFFSET AcumBadMsg
print3: mov ah,09
int 21h
pop dx
pop cx
pop bx
pop ax
iret
END start
Результат виконання програми
New handler for CTRL+C is set.
Press CTRL+C to see computer info.^C ( Натиснуто CTRL+C
Type of microprocessor: 80386 or later. ( Викликано обробник переривання <CTRL+C>
Type of computer: AT.
Acumulator is charged and working properly.
x ( Натиснуто символьну клавішу (будь-яку) для виходу з програми CTRL+C
Висновок: Виконуючи дану лабораторну роботу, я ознайомився з механізмом переривань, оволодів навичками їх обробки на прикладі створення програми, що замінює стандартний обробник переривання новим.