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

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

РОБОЧЕ ЗАВДАННЯ. Набити підготовлену програму, странслировать її, налагодити






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







Дата добавления: 2015-09-18; просмотров: 338. Нарушение авторских прав; Мы поможем в написании вашей работы!



Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

Лечебно-охранительный режим, его элементы и значение.   Терапевтическое воздействие на пациента подразумевает не только использование всех видов лечения, но и применение лечебно-охранительного режима – соблюдение условий поведения, способствующих выздоровлению...

Тема: Кинематика поступательного и вращательного движения. 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью, проекция которой изменяется со временем 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью...

Условия приобретения статуса индивидуального предпринимателя. В соответствии с п. 1 ст. 23 ГК РФ гражданин вправе заниматься предпринимательской деятельностью без образования юридического лица с момента государственной регистрации в качестве индивидуального предпринимателя. Каковы же условия такой регистрации и...

Схема рефлекторной дуги условного слюноотделительного рефлекса При неоднократном сочетании действия предупреждающего сигнала и безусловного пищевого раздражителя формируются...

Уравнение волны. Уравнение плоской гармонической волны. Волновое уравнение. Уравнение сферической волны Уравнением упругой волны называют функцию , которая определяет смещение любой частицы среды с координатами относительно своего положения равновесия в произвольный момент времени t...

Медицинская документация родильного дома Учетные формы родильного дома № 111/у Индивидуальная карта беременной и родильницы № 113/у Обменная карта родильного дома...

Studopedia.info - Студопедия - 2014-2024 год . (0.013 сек.) русская версия | украинская версия