Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи з ОС.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
250.37 Кб
Скачать

Частина 2. Електронні таблиці.

Мета: реалізувати в StarOffice таблицю вказаного типу, побудувати кругову діаграму.

Завдання

  1. Створити таблицю:

    N п/п

    ПІБ

    Нараховано, грн

    Податок

    1.

    Сич В.В.

    16,00

    2.

    Філь К.К.

    64,00

    3.

    Туз Д.І.

    120,00

    4.

    Дяк С.П.

    683,00

    5.

    Кудь О.О.

    185,00

    6.

    Грек А.А.

    920,00

    7.

    Рудь І.І.

    396,00

    8.

    Гук М.М.

    1232,00

    9.

    Жук Г.Г.

    943,00

  2. Заповнити колонку Податок, якщо діють такі умови:

    1. від суми, меншої 17 грн. податок не нараховується;

    2. від суми, що лежить в межах 17 грн.<сума<=85 грн., береться податок так: 10% від суми, що перевищує 17 грн.

    3. від суми, яка лежить в межах 85 грн.< сума <=170 грн., береться податок так: 6,88 грн.+ 15% від суми, що перевищує 85 грн.;

    4. від суми, що лежить в межах 170 грн.< сума, береться податок так: 11,98 грн.+20% від суми, яка перевищує 170 грн.

Вказівка. Використати функцію ЕСЛИ( ).

  1. Побудувати кругову діаграму з даними таблиці ПІБ, Податок з виносками значень.

  2. Роздрукувати результати.

Контрольні питання:

  1. Як увійти в StarOffice?Як створити таблицю в StarOffice?

  2. Як увійти в режим використання вбудованих функцій в StarOffice?

  3. Як працювати з вбудованими функціями StarOffice?

  4. Як будувати діаграму в StarOffice?

Лабораторна робота №4. Реалізація взаємодії паралельних процесів в ms dos на мові асемблеру.

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

Завдання

DOS дозволяє залишати програми резидентними в пам’яті. Для виділення спільної пам’яті для 2-х паралельних процесів треба загрузити в пам’ять пасивну резидентну програму, яка буде підтримувати функції: 1) виділення блоку пам’яті (повертати ідентифікатор), 2) визначення адреси блока пам’яті за його ідентифікатором і 3) звільнення блока пам’яті. Для реалізації багатозадачного режиму треба запустити активну резидентну програму, яка перехопить переривання IRQ0 і з кожним тактом системного таймера буде по черзі відбирати керування від кожного з запущених процесів і передавати наступному. Реалізувати треба полегшений варіант багатозадачності – перемикання процесів зі спільним кодом і даними, але з різним вмістом стеку і регістрів. Резидентна програма-диспетчер повинна з кожним перериванням таймера зберігати регістри перерваного процесу в його структуру, зчитувати регістри наступного процесу з черги і повертати керування , а структури і стеки всіх процесів повинні зберігатися в спільній області пам’яті. Також ця резидентна програма повинна підтримувати кілька викликів при допомозі певного програмного переривання – створення процесу, знищення процесу , передача керування наступному процесу, поки поточний процес знаходиться в стані очікування. В коді процесу все без виключення повинне бути повторно вхідним.

Вказівки: генератор випадкових чисел повинен використовувати 32-бітні регістри. Зміна напрямку руху змійки повинна бути випадковою. Змійка складається з точок в режимі 13h. Регістри, що зберігаються для кожного процесу, реалізувати у вигляді структури (директива STRUC), полями якої є ці регістри (по структурі на процес). Обробник переривань INT08h (IRQ0) повинен перемикати процеси.

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

Резидентні (TSR) програми постійно після завантаження залишаються в пам”яті і миттєво реагують на запити користувача або сповіщення в системі. Вони складаються з двох частин: установочної і резидентної. При першому виклику TSR-програма повністю завантажується в пам’ять і керування передається установочній секції, яка заповняє або модифікує вектори переривань , налаштовує програму на конкретні умови роботи, аналізуючи передані їй параметри і за перериванням 27h або функцією 31h переривання 21h завершує програму, лишаючи в пам’яті її резидентну частину, після чого система переходить в початковий стан. Запустити резидентну програму (передати їй керування і параметри) можна трьома способами: 1) викликати її оператором CALL як підпрограму; 2) використати механізм апаратних переривань; 3) використати механізм програмних переривань. Також спеціально для взаємодії з резидентними програмами в DOS є мультиплексне переривання 2Fh.

Перший засіб потребує наявності у памяті поточної активної програми, що повинна утворювати з материнською програмою міжпрограмний інтерфейс. Наприклад, щоб спростити структуру та обсяг транзитних програм можна оформити у вигляді TSR–програми процедури, загальні для групи транзитних програм. Другий засіб передбачує активізацію резидентної програми зовнішнім перериванням (від таймера, клавіатури, периферійного пристрою). Третій засіб іноді використовується при відлагодженні резидентних програм за допомогою INT 3h.

Типова структура резидентної програми:

PSP

Start:;(точка входу при запуску)

Jmp inst

. . .

MyHandler:;(точка входу при ;активізації за перериванням)

. . .

iret

Резидентна частина

inst:

. . .

mov dx, offset inst

int 27h

Секція встановлення резидентної

програми (відкидається після

встановлення).

При першому запуску програми з клавіатури керування передається командою jmp inst на на секцію ініціалізації, у якій готуються умови для подальшої активізації програми в резидентному стані. Зміст резидентної програми починається з мітки start. Активація її - за апаратним або програмним перериванням або командою CALL.

Зв’язок з резидентною програмою. Для звернення до резидентної програми можна використовувати область міжзадачних зв’язків.

По ходу виконання секції ініціалізації майбутня резидентна програма поміщає дані в обумовлені комірки області міжзадачних зв’язків. Наприклад, у слово 40h:F0h – відносну адресу команди з поміткою start, а в слово 40h:F2h – вміст сегментного регістру ES. Транзитна програма, бажаючи передати керування резидентній, налаштовуе регістр ES на початок області даних BIOS і виконує команду дальнього виклику: call dword ptr ES:0F0h.В цьому виподку резидентна программа повинна бути оголошена як далека процедура (myproc proc far) і завершуватися командою RET дальнього повернення.

Якщо резидентній програмі потрібно передати параметри, їх початкова адреса заноситься програмою у iншу комірку області міжзадачних зв”язків, наприклад 40h:F4h. У цьому випадку резидентна програма переносить наприклад, у регістр SI відносну адресу параметру з комірки 40h:F4h, а в регістр DS – сегментну адресу параметру з комірки 40h:F6h і після цього забирає самі параметри:

mov ax,ds [SI]

mov bx,ds:[SI + 2] і т.д.

У процесі ініціалізації резидентна програма поміщує свою адресу в вільний вектор, наприклад 60h. Для її активізації транзитній програмі потрібно виконати команду INT 60h. У цьому випадку резидентна програма повинна закінчуватися командою IRET. Адреси параметрів потрібно передати через інші вільні вектори.

Ще один засіб взаємодії з резидентними програмами - переривання 2Fh (функції C0h…FFh цього переривання зарезервовані для прикладних програм). Це переривання повертає в регістр AL стан резидентної програми:

AL = 0 - програма не встановлена

DL = 1 – програма не встановлена і її не можна встановити

AL =FFh – програма уже встановлена й її повторна установка не потрібна.

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

Системні засоби підтримки резидентних програм:

1. INT 27h – завершити програму і лишити її резидентною. На вході: в CS – сегментна адреса PSP, в DX – відносна адреса першого байту, який відкидається.

Це переривання не можна використовувати для збереження обробників переривань за критичкою помилкою і за Ctrl-Break.

2. Функція 25h INT 21h – встановити вектор переривання. На вході: AH = 25h, в AL – номер переривання, в DS:DX – адреса обробника переривання (вектор переривання).

3. Функція 35h INT 21h – прочитати вектор переривання. На вході: AH = 35h,

в AL – номер переривання. На виході: в ES:BX – адреса обробника переривання (вектор переривання).

4. Функція 31h INT 21h – завершити програму і лишити її резидентною. На вході: AH = 31h, в AL – код повернення, в DX – розмір резидентної секції в параграфах (параграф – область пам’яті об’ємом 16 байтів).

5. Функція 49h INT 21h – звільнити область пам’яті. На вході: AH = 49h, в ES – селментна адреса блоку пам’яті, який звільнюється. На виході: CF = 0 - помилок немає, CF = 1 – помилка, в AX – код помилки.

Контрольні питання:

  1. Для чого в програмі використовується структура?

  2. Яким чином програма визначає напрямок руху активної змійки?

  3. З допомогою якого переривання організовано вихід з програми в MS DOS?

  4. Що таке обробник переривань? Як здійснюється перемикання між процесами обробником переривання INT08h(IRQ0)?

  5. Яким чином завантажується резидентна програма в пам’ять ПК? Якими функціями переривання 21h здійснюється встановлення вектору переривання, читання вектору переривання?

  6. Як продовжує рухатися змійка при виході за межі екрану?

  7. Де в програмі встановлюється колір змійки?