Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Лабораторна робота N6. Переривання




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

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

ПЕРЕРИВАННЯ -це події, що змушують центральний процесор перервати виконання поточної роботи і перейти на виконання програми, називаної ОБРОБЛЮВАЧЕМ ПЕРЕРИВАННЯ. Перехід цей здійснюється за малий час за допомогою спеціально розроблених апаратних засобів.

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

Звичайно переривання викликаються подіями зовнішніми стосовно ЦП і потребуючого негайних дій. Наприклад:

- завершення операції введення/висновку;

- виявлення апаратного збою;

- "катастрофа" (відмовлення харчування).

Більшість сучасних процесорів підтримують механізм ТИПІВ і РІВНІВ ПЕРЕРИВАННЯ. Кожному типу звичайно відповідає осередок у пам'яті, називана ВЕКТРОМ ПЕРЕРИВАННЯ, що визначає місце розташування програми обработчтка переривання даного типу. Концепція типів переривання дозволяє призначати прерывниям пріоритети. Переривання групуються по рівнях, маю щим однаковий пріоритет.

ЦП комп'ютерів, що підтримують систему переривань, повинні мати засобу блокування переривань на час виконання критичних ділянок програми (виборчого чи глобального). При обробці переривання ЦП блокує всі переривання цього чи більш низьких рівнів і дозволяє - більш високих.

Процесори сімейства іAP80x86 підтримують 256 типів переривань, викликуваних подіями трьох груп:

- внутрішні апаратні переривання;

- зовнішні апаратні переривання;

- програмні переривання.

Кожному типу прерывния відповідає свій номер.

Внутрішні апаратні чи переривання відмовлення генеруються визначеними подіями, що виникають у процесі виконання програми (розподіл на 0, неправильний код операції). Закріплення номерів переривань за визначеними причинами жорстко "зашито" у процесорі.

Зовнішні апаратні переривання инициализируются контролерами периферійного чи устаткування співпроцесорами.

Програмні переривання. Будь-яка програма може ініціювати синхронне програмне переривання шляхом виконання команди Іnt із указівкою номера переривання, наприклад,

Іnt 10h

Розподіл номерів програмних переривань умовно і не закріплено апаратно.

Нижні 1024 байта системної пам'яті звуться ТАБЛИЦІ ВЕКТОРІВ ПЕРЕРИВАНЬ. Вектор займає 4 байти: сегмент і зсув відповідного оброблювача переривання.

ЦП, одержавши чи сигнал команду переривання, поміщає в стек уміст флагового регістра, очищає флани TF і ІP, заносить у стек уміст регістрів CS, ІP і блокує систему переривань. Потім за допомогою 8-бітового числа - номера переривання, установленого на внутрішній шині, витягає з таблиці векторів адреси CS і ІP і відновляє роботу з цієї адреси.

Звичайно оброблювач розблокує систему переривань, зберігає регістри, що будуть їм використовуватися й обробляє переривання. Наприкінці оброблювача повинна стояти команда ІRET - повернення з переривання. Ця команда відновлює первісне значення флагового регістра, CS і ІP.

Як приклад розглянемо, як використовувати команд- ные переривання для висновку інформації на екран дисплея.

Усі необхідні екранні операції можна виконати за допомогою команди Іnt 10h, що передає керування безпосередньо в BІOS. ПЕРЕД викликом переривання Іnt 10h необхідно задати в регістрі AH номер функції выода. В інших регістрах варто задати необхідні цієї функції параметри. Номера подфункций, їхні параметри, а також регістри, у які потрібно їх заносити приведені в довідковій інформації з BІOS, наприклад [2].

Для виконання деяких більш складних операцій існує переривання більш високого рівня Іnt 21h, що спочатку передає керування в DOS.

Екран можна представити у виглядідвомірного простору з адресуемыми позиціями, у кожну з який може бути встановлений чи курсор виведений символ. Відеомонітор, наприклад, може мати 25 рядків (нумеруемых від 0 до 24) і 80 стовпців (нумеруемых від 0 до 79). Нумерація рядків виробляється, починаючи з лівого верхнього кута екрана вниз, нумерація стовпців -починаючи також з лівого верхнього кута екран вправо.

 

ОЧИЩЕННЯ ЕКРАНА.

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

Початкове значення рядка і стовпця заноситься в регістр CX, кінцеве - у DX, значення 07 - у регістр BH, 0600h - у AX.

У наступному прикладі виконується очищення всього екрана.

MOV AX, 0600H;AH=06 (прокручування) AL=00 (весь екран)

MOV BH, 07;нормальний атрибут (чорно/білий)

MOV CX, 0000;верхня ліва позиція (CH=00 - номер рядка, CL=00 - номер стовпця)

MOV DX, 184FH;нижня права позиція (DH=18 - номер рядка, DL=4F - номер стовпця)

ІNT 10H;передача керування в BІOS

УСТАНОВКА КУРСОРУ. Команда Іnt 10h містить у собі установку курсору в будь-яку позицію екрана. Нижче приведений приклад установку курсору на 5-ую рядок і 12-тый стовпець.

MOV AH, 02;подфункция установки курсору

MOV BH, 00;екранна сторінка 0

MOV DH, 05;рядок 05

MOV DL, 12;стовпець 12

ІNT 10H;передача керування в BІOS

ВИСНОВОК НА ЕКРАН У БАЗОВІЙ ВЕРСІЇ DOS.

Висновок на екран у базовій версії DOS вимагає визначення текстового повідомлення в сегменті даних, установки в регістрі AH значення 09 (виклик функції DOS) і вказівки команди Іnt 21h. У процесі виконання операції кінець повідомлення визначається по обмежнику (знак долара '$'), як показано нижче:

 

NAMPRMP DB 'Це повідомлення','$'

........

MOV AH, 09;подфункция відображення рядка на екран

LEA DX, NAMPRMP;завантаження адреси повідомлення в регістр DX

ІNT 21H;виклик функції DOS

Знак обмежника '$' можна записувати безпосередньо після символьного рядка, як показано в прикладі, усередині рядка 'Це повідомлення$' чи в наступному операторі DB '$'. Використовуючи дану операцію, не можна вивести на екран символ долара. Якщо символ долара буде відсутній наприкінці виведеного повідомлення, то на екран будуть виводитися всі наступні симводы, поки код знака '$' не зустрінеться в пам'яті.

Команда LEA завантажує адресу області пам'яті NAMPRMP у регістр DX для передачі в DOS адреси виведеної інформації.

 

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

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

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

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

Набити підготовлену програму, странслировать її, налагодити. Памятайте, що при налагодженні програми налагоджувачем 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. Робота з символьними рядками

Мета роботи

Закріплення практичних навичок у роботі з масивами і покажчиками мови C, забезпеченні функціональної модульности






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных