Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка.doc
Скачиваний:
15
Добавлен:
08.11.2018
Размер:
1.15 Mб
Скачать

Порядок виконання.

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

  2. Ознайомитися з використанням стека під час виклику процедур.

  3. Вивчити систему переривань програм IBM PC і порядок використання стека при переході до програми обробки переривання.

Зміст завдання:

а) Введіть наступну послідовність інструкцій, починаючи з адреси CS:0100

CS:0100  MOV  AX,0222  CS:0103  MOV  BX,0555  CS:0106  CALL  0200  CS:0109  MOV  DX,AX 

і починаючи з адреси CS:0200 

CS:0200  ADD AX,BX  CS:0202  RET 

Переконайтеся  в тому, що регістр IP містить 0100h і зазначену вище послідовність  команд.

Відзначте порядок і результати виконання кожної команди. Зверніть особливу увагу на  регістри SS і SP, CS і IP. Зафіксуйте вміст стека до і після виконання інструкцій CALL і RET (скільки байт заноситься в стек і скільки витягується), користуючись командою перегляду дампу пам’яті. Поясніть для чого використовується стек в даному випадку. 

б) Прочитайте вектор переривання 21h, використовуючи команду для перегляду дампу пам'яті. 

Введіть наступні команди починаючи з адреси CS:100 

CS:0100  MOV DL,41  CS:0102  MOV AH,02  CS:0104  INT 21h  CS:0106  SHR AH,1

Протрасуйте цю послідовність команд і відзначте вміст регістрів SS і SP, CS і IP до виконання команди  INT і після . Зафіксуйте зміни вмісту  стека (кількість занесених байт і їх значення). Для чого використовується в даному випадку стек? Значення яких регістрів були занесені в  стек і для чого? Після виконання цього пункту завдання здійсніть вихід з налагоджувача DEBUG. 

в) Введіть наступні інструкції починаючи з адреси CS:0100 

CS:0100             MOV    CX,0004  CS:0103             MOV    BX,A3C5  CS:0106             RCL    BX,1  CS:0108             PUSH   BX  CS:0109             LOOP   0106  CS:010B             MOV    CX,0004  CS:010E             POP    AX  CS:010F             LOOP   010E 

Протрасуйте цю послідовність команд. Зверніть увагу на зміну вмісту регістра CX при виконанні команди LOOP. Для чого в даному випадку використовується цей регістр? Коли закінчується цикл? Фіксуйте стан стека до і після виконання команд  PUSH і POP. Для перегляду вмісту стека використовуйте команду перегляду дампу пам'яті. 

Зміст звіту. 

  1. Тема і мета лабораторної роботи.

  2. По кожному пункту завдання відобразити: а) структуру всіх команд, що використані в процесі виконання цього пункту завдання;  б) результати виконання кожної команди, значення регістрів, на які потрібно було звернути увагу.

Короткий опис команд мови assembler, що використовуються в лабораторній роботі 6

  • Організація циклів Для цього в лабораторній роботі використовується команда LOOP. Формат цієї команди  LOOP адреса В регістрі CX заздалегідь слід вказати число повторень в циклі. При виконанні цієї команди вміст регістра CX автоматично зменшується на 1.  Поки значення в CX не зрівняється нулю, управління передається за вказаною в команді адресою. Якщо  значення в регістрі CX стає рівним нулю, то виконується наступна після LOOP  команда.

  • Пересилка даних Команда  MOV  приймач, джерело пересилає слово або байт з джерела в приймач. Наприклад:  MOV  BX,AX  пересилає 2 байти з регістра AX в регістр BX MOV  DX,1234  пересилає число 1234 в регістр DX

  • Занесення слова в стек Для цієї мети використовується команда PUSH Формат команди  PUSH  им'я_регістра Ця команда зберігає значення слова із вказаного регістра в стеку для подальшого використання. Команда зменшує значення в регістрі SP на 2 і передає слово із вказаного регістра в нову вершину стека.

  • Витягання слова із стека. Проводиться за допомогою команди  POP  им'я_регістра  Ця команда передає слово із стека у вказаний регістр. Слово витягується із стека і значення в регістрі SP збільшується на 2 

  • Виклики процедур. Процедури - це список інструкцій, які можна викликати з різних місць програми. Виклик процедур здійснюється командою CALL. Формат цієї команди CALL  адреса Наприклад CALL  0200 викликає процедуру, почало якій розташовано в елементі пам'яті CS:0200. При цьому в стеку зберігається адреса повернення - вона показує, до якої інструкції повернутися після виконання процедури, а в регістр IP завантажується значення 0200. Даний приклад ілюструє внутрішньосегментний виклик процедури - NEAR (близький). Процедура закінчується командою RET, яка виконує повернення в попередню програму. При цьому адреса повернення завантажується із стека в регістр IP.

  • Крім того існують міжсегментні виклики процедур FAR (дальній). В цьому випадку  адреса повернення має наступний вигляд: SP --> IP (зсув інструкції, що записана за CALL ) CS (значення сегменту кодів попередньої програми)

  • Під час виклику процедури обробки переривання ( INT )в стек також завантажуються значення регістра прапорів. У регістри CS і IP завантажується адреса першої команди підпрограми, що оброблює це переривання.  Ця адреса зберігається в таблиці векторів переривань. Кожен вектор займає 4 байти. Тому розташування вектора можна порахувати виходячи з його номера  (номер *4). Прочитати вектор переривання можна командою перегляду пам'яті -D  0000:номер*4

  • Адреса вершини стека зберігається в парі регістрів SS і SP.

  • Команда додавання Наприклад  ADD  AX,BX Вміст регістрів AX і BX складається і результат розміщується в регістрі AX