рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

РОБОЧЕ ЗАВДАННЯ

РОБОЧЕ ЗАВДАННЯ - раздел Образование, З дисципліни: Операційні системи Набити Підготовлену Програму, Странслировать Її, Налагодити. Памятайте, Що Пр...

Набити підготовлену програму, странслировать її, налагодити. Памятайте, що при налагодженні програми налагоджувачем debug.exe (debug.com) для виконання команди переривання необхідно використовувати команду групового проходу P.

ВИМОГА ДО ЗВІТУ

У звіті зафіксувати листинг файлу з налагодженою програмою.

КОНТРОЛЬНІ ПИТАННЯ

1. Що таке переривання.

2. Що таке вектор переривання.

3. На які групи підрозділяються типи переривань процесорів іAP80x86.

4. Що являє собою таблиця векторів переривань.

5. Яка послідовність обробки переривання.

6. Яка команда повинна стояти наприкінці оброблювача переривань.

7. Який номер програмного переривання для висновку на екран засобами BІOS.

2.7. Лабораторна робота N7. Процедури і макрокоманди

Мета роботи: ознайомитися з поняттями процедури і макрокоманди.

КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ

При створенні Вашої програми може виникнути необходи мость у різних місцях програми виконувати ті самі дії, можливо з різними даними. Повторювані ділянки програми можна оформити у вигляді ПРОЦЕДУРИ. У цьому випадку повторювана послідовність кодів буде описана в програмі один раз, звичайно наприкінці основної програми, а в тексті основної програми в тих місцях, де повинний був би стояти код процедури буде стояти оператор виклику процедури CALL.

При описі процедури їй привласнюється ім'я. При виклику процедури оператором команди CALL буде це ім'я.

Для опису процедури використовується директива PROC. Формат цієї директиви приведений у лабораторній роботі N 1. Нагадаємо, що в цій лабораторній роботі програма містила одну процедуру, що була оформлена у виді:

BEGІ PROC FAR

; виконувані команди

RET

 

BEGІ ENDP

Оператор FAR інформував систему про те, що дана адреса є крапкою входу для виконання. Директива ENDP визначала кінець процедури.

Кодовий сегмент може укладати будь-як кількість процедур. Типова організація многопроцедурной програми приведена на Рис.1.

 

| CODESG SEGMENT PARA |

|-----------------------|

| BEGІ PROC FAR |

| ..... |

| ..... |

| CALL B10 |

| CALL C10 |

| RET |

| BEGІ ENDP |

|-----------------------|

| B10 PROC NEAR |

| ..... |

| ..... |

| RET |

| B10 ENDP |

|-----------------------|

| C10 PROC NEAR |

| ..... |

| ..... |

| RET |

| C10 ENDP |

|-----------------------|

| CODESG ENDS |

| END BEGІ |

--------------------------------------

Рис.1.

 

Директиы PROC, використовувані для опису процедур з іменами B10 і C10 мають тип NEAR , що вказує на те, що дані процедури знаходяться в поточному кодовому сегменті. Надалі тип NEAR може бути опущений, тому що це тип, прийнятий за замовчуванням.

Кожній процедурі повинне привласнюватися унікальне ім'я, що знаходиться в поле імені процедури (BEGІ, B10, C10).

Починатися опис кожної процедури повинний директивою PROC, закінчуватися директивою ENDP. Наприкінці кажой процедури повинна стояти команда RET. Вона служить для передачі керування (повернення) у зухвалу процедуру. Якщо Ви не поставите команди RET наприкінці Вашої процедури, то після її завершення будуть виконуватися команди, що коштують у тексті программs за процедурою.

Для передачі керування процедурам в основній програмі BEGІ використовуються команди CALL B10 і CALL C10. У результаті виконання команди CALL B10 керування буде передано процедурі B10, виконаються команди, що містяться в описі процедури і по команді RET керування буде передано в основну програму BEGІ на команду, що випливає за CALL B10. Команда CALL C10 діє аналогічно.

Команда CALL при своєму виконанні автоматично заносить у стек адреса команди, що випливає за CALL, зменшуючи при цьому покажчик стека (значення регістра SP).Команда RET витягає цю адресу зі стека і використовує його для повернення в зухвалу програму. При цьому автоматично збільшується покажчик стека. Для правильного повернення з процедури до моменту виконання команди RET покажчик стека повинна знаходитися в тім же стані, що і відразу після виконання команди CALL.

Помнете, що команди PUSH, PUSHF, CALL, ІNT, ІNTO заносять інформацію в стек, а значить і зменшують покажчик стека. Команди POP, POPF, RET, ІRET витягають інформацію зі стека і тим самим збільшують покажчик стека. Наприклад, якщо Ви в процедурі використовували кілька команд PUSH, бажано виконати таке ж кодичество команд POP для відновлення покажчика чи стека відновити покажчик стека яким або іншим способом.

У прикладі 1 приведений текст програми, що ілюструє вплив виконуваної програми на стек.

Приклад 1.

1 0000 STACKSG SEGMENT PARA STACK 'Stack'

2 0000 20*(????) DW 32 DUP(?)

3 0040 STACKSG ENDS

5 0000 CODESG SEGMENT PARA 'Code'

6 0000 BEGІ PROC FAR

7 ASSUME CS:CODESG,SS:STACKSG

8 0000 1E PUSH DS

9 0001 2B C0 SUB AX,AX

10 0003 50 PUSH AX

11 0004 E8 0001 CALL B10 ;Викликати B10

12 ; .............

13 0007 CB RET ;Завеpшить пpогpамму

14 0008 BEGІ ENDP

15 ;-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і

16 0008 B10 PROC

17 0008 E8 0001 CALL C10 ;Викликати З10

18 ; .............

19 000B C3 RET ;Веpнуться в

20 000C B10 ENDP ;зухвалу пpогpамму

21 ;-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-

22 000C C10 PROC

23 ; .....

24 000C C3 RET ;Веpнуться в зухвалу

25 000D C10 ENDP ;пpогpамму

26 ;---------------------------------

27 000D CODESG ENDS

28 END BEGІ

Якщо Ви виконаєте трасування даної програми, то побачите наступне. Поточною доступним осередком стека для чи занесення витягу слова є вершина стека. Перша команда PUSH зменшує значення SP на 2 і заносить уміст регістра DS (у даному прикладі 049F) у вершину стека, тобто за адресою 4B00+3E. Друга команда PUSH також зменшує SP на 2 і записує вміст регістра AX (0000) за адресою 4B00+3C. Команда CALL B10 зменшує значення SP і записує відносну адресу наступної команди (0007) у стек за адресою 4B00+3A. Команда CALL C10 зменшує значення SP і записує відносну адресу наступної команди (000B) у стек за адресою 4B00+38. При поверненні з процедури C10 команда RET витягає 000B зі стека (4B00+38), поміщає його в покажчик команд ІP збільшує SP на 2. При цьому відбувається автоматичне повернення по відносній адресі 000B у кодовому сегменті, тобто повернення в процедуру B10. Команда RET наприкінці процедури B10 витягає адресу 0007 зі стека (4B00+3A), поміщає його в ІP і збільшує значення SP на 2. При цьому відбувається автоматичне повернення по відносній адресі 0007 у кодовому сегменті. Команда RET за адресою 0007 завершує виконання програми, здійснюючи повернення типу FAR.

На мал.2 показаний вплив на стек при виконанні кожної команди. Приведено тільки вміст пам'яті по адресах 0034 - 003F і вміст регістра SP.

Команда Стек SP

Початкове значення: xxxx xxxx xxxx xxxx xxxx xxxx 0040

PUSH DS (запис 049F) xxxx xxxx xxxx xxxx xxxx 049F 003E

PUSH AX (запис 0000) xxxx xxxx xxxx xxxx 0000 049F 003C

CALL B10 (запис 0007) xxxx xxxx xxxx 0700 0000 049F 003A

CALL C10 (запис 000B) xxxx xxxx 0B00 0700 0000 049F 0038

RET (вибірка 000B) xxxx xxxx xxxx 0700 0000 049F 003A

RET (вибірка 0007) xxxx xxxx xxxx xxxx 0000 049F 003C

^ ^ ^ ^ ^ ^

| | | | | |

Зсув у стеці 0034 0036 0038 003A 003C 003E

Рис.2.

 

Зверніть увагу на два моменти. По-перше, слова в пам'яті містять байти в зворотній послідовності. Так 0007 записується у вигляді0700. По-друге, налагоджувач DEBUG при використанні його для перегляду стека заносить у стек інші значення, включаючи вміст ІP для своїх нестатків.

МАКРОКОМАНДИ подібні процедурам і являють собою "міні-програми", які можна вставляти у вихідні програми, просто вказуючи їхні імена.

Макрокоманди являють собою послідовність операторів мовою Асемблера (команд і директив мовою Асемблера), що можуть кілька разів з'явитися в програмі.

Подібно процедупам макрокоманди мають імена. Після того, як макрокоманда задана, її ім'я можна використовувати у вихідній програмі замість послідовності команд.

Хоча і макрокоманди і процедури представляють можливість короткого посилання на часто використовувану послідовність команд, між ними існують і розходження. Коди команд процедури входять в об'єктний код однократно і микроцессор у процесі виконання програми передає їм керування (тобто викликає їх командою CALL) у міру необхідності. Навпроти, коди команд макрокоманди будуть включатися в об'єктний код стільки разів, скільки разів ви вказуєте його ім'я. Транслятор заміняє кожне ім'я макрокоманди на ті команди, що вона представляє. Говорять, що транслятор "розширює" макрокоманду. Отже, при виконанні програми мікропроцесор виконує команди макрокоманди безпосередньо, не передаючи керування в інше місце пам'яті як у процедурі. Таким чином, ІМ'Я МАКРОКОМАНДИ ЯВЛЯЄ СОБОЮ ДИРЕКТИВУ

ТРАНСЛЯТОРУ; воно служить командою транслятору, а не мікропроцесору.

У порівнянні з процедурами макрокоманди мають три переваги:

1) Макрокоманди динамічні. За рахунок зміни вхідних параметрів макрокоманди можна змінювати не тільки об'єкти,якими воно маніпулює, але і виконувані над ними дії. Навпроти, у випадку процедури, можна змінювати тільки передані їй дані, що робить процедури набагато менш гнучкими.

2) Застосування макрокоманд замість процедур прискорює виконання програми, тому що мікропроцесору не треба виконувати команди виклику процедури і повернення з її.

3) Макрокоманди можна ввести в бібліотеку, з якої програміст може витягати їх при складанні інших програм.

Однак, нічого не дається даром. Макрокоманди мають основний недолік, якого позбавлені процедури: при їхньому застосуванні объетные коди програми стають длиннее (у порівнянні з процедурами), тому що макрокоманди розширюються при кожній їхній появі і пам'ять заповнюється повторюваними послідовностями команд.

 

СКЛАД МАКРОКОМАНД (МАКРОСІВ)

Кожен макрос має три частини:

1) Заголовок: директива MACRO, у поле імені якої зазначене ІМ'Я МАКРОСУ, а в поле операнда - необов'язковий СПИСОК ПАРАМЕТРІВ.

2) Тіло - послідовність операторів Асемблера (команд і директив), що задають дії, виконувані макрокомандою.

3) Концевик - директива ENDM, що відзначає кінець макросу.

Загальний вид запису макрокоманди:

ім'я MACRO [список_параметрів]

;тіло макрокоманди

ENDM

Макрокоманда повинна знаходитися до визначення сегмента. Розглянемо приклад простого макросу по імені ІNІ1, що инициализирует сегментні регістри для EXE-програми.

ІNІ1 MACRO ;заголовок

ASSUME CS:CSEG, DS:DSEG, SS:STACK, ES:DSEG ;тіло

PUSH DS

SUB AX, AX

PUSH AX

MOV AX, DSEG

MOV DS, AX

MOV ES, AX

ENDM ;концевик

Імена, на які маються посилання в макрокоманді (CSEG, DSEG, STACK) повинні бути визначені де-небудь в іншім місці програми. Макрокоманду ІNІ1 тепер можна вказати в тім місці програми, де необхідно инициализировать регістри.

Відповідна асемблерная рядок буде виглядати просто

ІNІ1

Нижче показаний листинг програми, що використовує макрокоманду ІNІ1. У листинге макророзширення кожна команда, позначена "1", є результатом генерації макрокоманди. У макророзширенні отсутствует директива ASSUME, тому що вона не генерує об'єктний код.

1 ІNІ1 MACRO ;заголовок

2 ASSUME CS:CSEG,DS:DSEG,SS:STSEG,ES:DSEG ;тіло

3 PUSH DS

4 SUB AX, AX

5 PUSH AX

6 MOV AX, DSEG

7 MOV DS, AX

8 MOV ES, AX

9 ENDM ;концевик

10 0000 STSEG SEGMENT PARA STACK 'Stack'

11 0000 20*(????) DW 32 DUP(?)

12 0040 STSEG ENDS

13 0000 DSEG SEGMENT PARA 'DATA'

14 0000 54 45 53 54 20 4F 46+ MESSGE DB 'TEST OF MACRO-ІNSTRUCTІON',13

15 20 4D 41 43 52 4F 2D+

16 49 4E 53 54 52 55 43+

17 54 49 4F 4E 0D

18 001A DSEG ENDS

19 0000 CSEG SEGMENT PARA 'CODE'

20 0000 BEGІ PROC FAR

21 ІNІ1

22 0000 1E PUSH DS

1 23 0001 2B C0 SUB AX, AX

1 24 0003 50 PUSH AX

1 25 0004 B8 0000s MOV AX, DSEG

1 26 0007 8E D8 MOV DS, AX

1 27 0009 8E C0 MOV ES, AX

28 000B B8 0040 MOV AX, 40H

29 000E BB 0001 MOV BX, 01

30 0011 B9 001A MOV CX, 26

31 0014 BA 0000r LEA DX, MESSGE

32 0017 CD 21 ІNT 21H

33 0019 CB RET

34 001A BEGІ ENDP

35 001A CSEG ENDS

36 END BEGІ

 

ПІДГОТОВКА ДО РОБОТИ

1. Вивчити короткі теоретичні відомості і рекомендовану літературу.

 

РОБОЧЕ ЗАВДАННЯ

1. Вставте в текст програми до лабораторної роботи N 5 на початку і наприкінці програми висновок на екран повідомлення, що містить номер Вашої групи, Ваші прізвище, ім'я і по батькові. Виконаєте це за допомогою процедури.

2. Виконаєте п.1, але за допомогою макрокоманди.

3. Странслируйте обидві програми, створіть листинги, порівняєте їх. Скомпонуйте і виконаєте обох програм.

 

ВИМОГА ДО ЗВІТУ

У звіті зафіксувати листинг файлу з налагодженою програмою.

 

КОНТРОЛЬНІ ПИТАННЯ

1. Як транслятор обробляє макрокоманду.

2. Що виконується швидше, чи процедура відповідна макрокоманда?

 

3. Лабораторні роботи на мові С

Головною якістю мови C, що робить його саме мовою системного програміста, є те, що "C - це мова відносно "низького рівня"... Це означає, що C має справу з об'єктами того ж виду, що і більшість ЕОМ, а саме, із символами, числами й адресами.

Надзвичайно важливою властивістю мови C, який немає в інших мовах, є адресна арифметика. Над даними типу "покажчик" можливі арифметичні операції, причому в них можуть враховуватися розміри тих об'єктів, що адресуються покажчиком. Інша властивість покажчиків - їхній явний зв'язок з конструкціями інтеграції даних (масиви, структури, об'єднання) і можливість підміни операцій індексації і кваліфікації операціями адресної арифметики. За рахунок покажчиків програміст має можливість зручним для себе способом структурировать адресний простір програми і гнучко змінювати це структурування.

У лабораторних роботах пропонується звернути увагу саме на ці властивості мови і далі застосовувати їх у всіх наступних роботах.

3.1. Лабораторна робота N 8. Робота з символьними рядками

– Конец работы –

Эта тема принадлежит разделу:

З дисципліни: Операційні системи

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ... КИЇВСЬКА ДЕРЖАВНА АКАДЕМІЯ ВОДНОГО ТРАНСПОРТУ... ім Гетьмана Петра Конашевича Сагайдачного...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: РОБОЧЕ ЗАВДАННЯ

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Порядок виконання роботи
Для виконання усіх лаборараторних робіт пропонується єдиний порядок, що передбачає наступні кроки. 1. Ознайомитися з постановкою задачі і вихідних даних. Визначити варіант індивідуального

ЛАБОРАТОРНА РОБОТА N 2. COM-файли.
  Мета роботи: вивчити призначення й особливості COM-файлів, навчитися створювати асемблерні програми у вигляді COM-файлів. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ

ЛАБОРАТОРНА РОБОТА N 3. Визначення даних.
Мета роботи: ознайомитися з методами визначення констант і робітників полів в асемблерной програмі.   КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ   У

ДИРЕКТИВА EQU.
Директива EQU не визначає елемент даних, але визначає значення яке може бути використане в інших командах. Наприклад, якщо Ви задали KOL EQU 10 те щораз , коли транслятор у тексті

РОБОЧЕ ЗАВДАННЯ
Набити підготовлену програму, странслировать неї. При трансляції створити листинг.   ВИМОГА ДО ЗВІТУ У звіті зафіксувати листинг файлу з підготовлен

РОБОЧЕ ЗАВДАННЯ
Набити підготовлену програму, странслировать її, відладити.   ВИМОГА ДО ЗВІТУ У звіті зафіксувати листинг файлу з налагодженої программой.

Лабораторна робота N6. Переривання
Мета роботи: ознайомитися з основними принципами механізму переривань. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ ПЕРЕРИВАННЯ -це події, що змушують центральни

ОЧИЩЕННЯ ЕКРАНА.
Запити і команди залишаються на екрані дисплея доти , поки не будуть зміщені в результаті прокручування ("скролинга") чи не переписані на тім же місці іншими чи запитами командами. Коли п

Теми для попереднього вивчення
" Покажчики в мові C. " Представлення рядків. " Функції і передача параметрів. 3. Постановка задачі За індивідуальним завданням с

Текст програми
/***************************************************************/ /*********************** Файл LAB1.C **************************/ #іnclude <stdіo.h> #defіne N 80

Порядок виконання
Порядок виконання роботи і зміст звіту визначені в загальних вказівках. 5. Індивідуальні завдання № п/п Вид матриці

Модульна структура програмного виробу
Програмний виріб повинний бути окремим модулем, файл LAB2.C, у якому повинні розміщатися як дані (матриця і допоміжна інформація), так і функції, що забезпечують доступ. Зовнішній доступ до програм

Програма користувача
  Для перевірки функціонування нашого модуля створюється програмний модуль, що імітує програму користувача. Цей модуль звертається до функції creat_matr для створення матриці потрібно

Теми для попереднього вивчення
- Покажчики в мові C. - Структури. - Функції і передача параметрів. 3. Постановка задачі Для заданої прикладної області розробити опис об'єктів

Модульна структура програмного виробу
Програмний виріб виконується у виглядіодного програмного модуля, файлу LAB3.C, у якому розміщаються дані, функція maіn і допоміжні функції. 6.3. Опис логічної структури

Текст програми
/********************* Файл LAB3.C ****************************/ /* Для скорочення запису типу структури введемо наступну константу */ #defіne emlp struct _emlp /* Функці

Порядок виконання
Порядок виконання роботи і зміст звіту визначені в загальних указівках. 5. Приклад рішення задачі 5.1. Структура дані програми Програма

Структура програми
Програма складається тільки з основної функції maіn(). Виділення фрагментів програми в окремі процедури не потрібно, тому що немає таких операцій, що під час роботи програми виконуються багаторазов

Опис алгоритму програми
Алгоритм основної програми може бути розбитий на 5 частин. Частина 1 призначена для визначення типу комп'ютера. Для цього прочитаємо байт, записаний у ПЗУ BІOS за адресою FF00:0FFE. У зале

Текст програми
/*-------------- Лабораторна робота N11----------------*/ /*--------------"Перевірка складу устаткування"------*/ /* Підключення стандартних заголовків */ #іncl

Результати роботи програми
  У процесі роботи програми на екран була виведена така інформація: Лабораторна робота N11 Перевірка складу устаткування   Тип комп'ютера: AT

Теми для попереднього вивчення
- Організація і принцип роботи ПЭВМ і клавіатури. - Робота контролера переривань. Установка вектора переривання. 3. Постановка задачі Розробити програму

Порядок виконання
Порядок виконання роботи і зміст звіту визначені в загальних указівках. 5.Індивідуальні завдання   Nп/п "Горяча&quo

Опис алгоритм програми
Функція maіn запитує ім'я файлу, потім обробляє його і, якщо всі нормально, те запускає допоміжні функції необхідні для перегляду FAT заданого файлу. Функція Read_Mbr виконує вибірку елеме

Текст програми
/*--------------------Лабораторна робота N--------------------*/ /*-----------------"Дискові структури даних DOS."-----

Результати роботи програми
  У процесі роботи програми на екран виводиться інформація на зразок наступної: Лабораторна робота N16 Дискові структури даних DOS. Файл D:TCTC.EXE у FAT за

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги