У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент


КУРСОВИЙ ПРОЕКТ

з дисципліни “Системне програмування”

Тема – РОЗРОБКА РЕЗИДЕНТНОЇ ПРОГРАМИ, ЯКА ПОКАЗУЄ ПОТОЧНУ ДАТУ І ЧАС, А ТАКОЖ ГЕНЕРУЄ ЗВУКОВИЙ СИГНАЛ ЧЕРЕЗ ЗАДАНИЙ ЧАСОВИЙ ІНТЕРВАЛ

Анотація

В курсовому проекті розроблено алгоритм обробки переривань таймера, на основі якого написано резидентну програму, яка генерує звуковий сигнал через заданий часовий інтервал. Програму виконано на рівні BIOS-переривань та команд мови Assembler, також детально розглянута структура та параметри резидентної області.

Summary

In a course project the algorithm of the events trapping of timer is developed on the basis of which resident software is written which generates a sound signal through the set sentinel interval. The program is executed at the level of BIOS-breaking and commands of language of Assembler, also in detail considered structure and parameters of resident region.

Зміст

ЗМІСТ 5 ОПИС ОСНОВНИХ ФУНКЦІЙ, ЩО ВИКОРИСТАНІ

В ПРОГРАМІ, БЛОК-СХЕМА ПРОГРАМИ 6

КОД ПРОГРАМИ З ПОЯСНЕННЯМИ (РЕМАРКАМИ)…… 11 ОПИС РОБОТИ 18

ВИСНОВКИ 19

ПЕРЕЛІК ВИКОРИСТАНИХ ЛІТЕРАТУРНИХ ДЖЕРЕЛ 20

2. ОПИС ОСНОВНИХ ФУНКЦІЙ, ЩО ВИКОРИСТАНІ В ПРОГРАМІ, БЛОК-СХЕМА ПРОГРАМИ

В резидентній програмі, яка виводить поточну дату і час, а також генерує звуковий сигнал через заданий інтервал часу використано наступні функції:

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

jl - команда, яка здійснює перехід, аналогічний попередній, з умовою якщо перший операнд при попередньому порівнянні виявився меншим від другого.

jne - ця команда здійснює перехід, за умови що операнди виявились не рівними між собою.

ja - ця команда здійснює перехід, за умови що один з операндів виявився вище другого.

jc - ця команда здійснює перехід, за умови переносу.

jz - ця команда здійснює перехід, за умови рівності нулю.

jbe - ця команда здійснює перехід, за умови що операнди або нижчі один одного або рівні між собою.

pusha - команда розміщує в стеку регістри в порядку : AX,CX,DX,BX,SP,BP,SI,DI.

pushf - команда розміщує регістр флажків в стеці.

popa - команда виконує дії повністю протилежні pusha, але поміщене в стек значення SP або ESP ігнорується. popa завантажує зі стеку DI,SI,BP, збільшує SP на 2, і завантажує BX,DX,CX,AX.

mov - базова команда пересилання даних. Здійснює копіювання даних з джерела (вказується другим) в приймач (вказується першим, одразу після назви команди).

cmp - команда зрівнює операнди і встановлює флажки. Процес здійснюється шляхом вирахування джерела (число, регістр або змінна) з приймача (регістр або змінна, приймач та джерело не можуть бути змінними одночасно), при чому результат вирахування нікуди не записується. Єдиним наслідком роботи цієї команди є зміна флажків CF, OF, SF, ZF, AF і PF. В даній програмі команда використовується в поєднанні з командами переходу jmp, jl та jne.

iret - вихід (повернення) з переривання. Повертає зі стеку значення IP, CS і FLAGS, які були до переривання.

call - ця команда здійснює виклик процедури або переключення задачі.

inc - ця команда збільшує значення операнда в пам’яті або регістрі на 1.

lea - ця команда забезпечує отримання ефективної адреси (зміщення) джерела. 

xor - ця команда забезпечує виконання операції виключаючого АБО з двома операндами місткістю в байт, слово або подвійне слово.

sub - ця команда забезпечує цілочислове віднімання.

out - ця команда забезпечує вивід значення в порт вводу/виводу.

in - ця команда забезпечує ввід значення з порту вводу/виводу.

or - ця команда забезпечує виконання операції логічного АБО з

бітами операнду призначення.

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

ret - ця команда забезпечує повернення управління з процедури до викликаючої її програми.

shl - ця команда забезпечує логічний зсув операнду вліво.

rcl - ця команда забезпечує виконання операції циклічного зсуву операнду вліво через флажок переносу cf .

add - ця команда забезпечує додавання двух операндів джерело і приймач місткістю в байт, слово або подвійне слово.

xchg - ця команда забезпечує обмін двох значень між двома регістрами або між регістрами і пам’яттю.

mul - ця команда забезпечує виконання операції множення двох цілих чисел без врахування знаку.

Блок – схема загрузочної частини програми

так ні

Блок – схема резидентної частини програми

 

так ні

 

 

Програма на мові Assembler

.model tiny ; модель пам’яті

.code ; основний сегмент коду

.286 ; директива задання набору допустимих команд

.startup

begin_:

jmp install_

my_1Ch proc

pushf ; зберігаємо всі флажки в стеку

call cs:old_1Ch ; викликаємо оригiнальний вектор

push ax ; зберігаємо в стек

push cx ; регістри

mov ax,word ptr cs:delta ; наступив час

cmp ax,word ptr cs:cntr ; звукового

ja not_in_time ; сигналу

mov word ptr cs:cntr,0 ; скидаємо лiчильник

mov ax,400 ; частота i тривалiсть

mov cx,2000 ; звукового сигналу

call Sound ; викликаємо процедуру Sound

not_in_time:

inc word ptr cs:cntr ; iнкриментуєм лiчильник

pop cx

pop ax

pusha

push ds

push es

mov ax,cs

mov ds,ax

mov es,ax

lea si,td ; де будуть відображатися дата i час для подальшого

виведення на екран

wait_data:

mov ah,04h ; отримуємо

int 1Ah ; дату

jc wait_data

; переконвертовуємо i записуємо

; у рядок день, мiсяць i рiк

xor ah,ah

mov al,dl

call Reg2Str ; викликаємо процедуру Reg2Str

inc si

mov al,dh

call Reg2Str

inc si

mov ax,cx

call Reg2Str

wait_time:

mov ah,02h ; отримуємо

int 1Ah ;


Сторінки: 1 2 3