Главная

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

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

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

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

ТОР 5 статей:

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

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

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

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

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

КАТЕГОРИИ:






Порядок виконання роботи. Для виконання усіх лаборараторних робіт пропонується єдиний порядок, що передбачає наступні кроки.




Для виконання усіх лаборараторних робіт пропонується єдиний порядок, що передбачає наступні кроки.

1. Ознайомитися з постановкою задачі і вихідних даних. Визначити варіант індивідуального завдання.

2. Сконструювати структуру програми.

3. Скласти і набрати текст програми і затвердити його у викладача.

4. Пункти 1 - 3 повинні бути виконані попередньо, до проведення даної лабораторної роботи.

5. Виконати компіляцію програми.

6. Провести аналіз і виправлення виявлених синтаксичних помилок у тексті програми і повторити пункти 5 і 6. При усуненні всіх синтаксичних помилок перейти до виконання пункту 7.

7. Одержати рішення (зображення) і, у випадку виявлення логічних помилок, визначити й усунути їх. Продемонструвати викладачу остаточний варіант програми і її роботу.

Зміст звіту

Звіт оформляється по кожній лаборараторній роботі і складається з наступних розділів.

- Номер та тема лаборараторної роботи;

- Автор (ф.і.п. студента, факультет, спеціальність, група);

- Мета роботи;

- Індивідуальне завдання;

- Опис структур даних і алгоритмів;

- Текст програми;

- Результати роботи програми (вихідні дані та результати у вигляді копій екрану).

- Інтерпретація результатів.

 


2. Лабораторні роботи на мові Асемблер

2.1. Лабораторна робота N 1_1 Перша програма на Асемблері

 

Мета роботи: ознайомитися з основними вимогами до програм мовою Асемблера.

 

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

Першим етапом створення програми є написання текстового файлу на мові Асемблер. Цей файл створюється будь-яким текстовим редактором.

Надалі цей текстовий файл буде оброблений спеціальною програмою- транслятором для перетворення в машинний код.

У цій і наступних лабораторних роботах наведені правила написання програм мовою Асемблера фірми Mіcrosoft - MASM.

Програма, написана мовою Асемблера, складається з рядків. Максимальна довжина рядка - 132 символу. Реально використовується 80 (ширина екрана). Рядки відокремлюються друг від друга символом повернення каретки (Enter).

Основний формат рядка.

 

[мітка] команда [операнд][,операнд] [;коментарий]

 

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

МІТКА - це мнемонічне ім'я, що позначає даний рядок для наступного звертання. Мітка може містити до 31 символу. Припустимі символи:

букви: від A до Z і від a до z;

цифри: від 0 до 9;

спеціальні символи: знак питання (?),

крапка (.) - тільки перший символ,

амперсенд (@),

підкреслення (_),

долар ($).

Першим символом у мітці повинна бути буква чи спеціальний символ. Асемблер не робить розходження між заголовними і малими літерами.

Імена регістрів зарезервовані. Їх допускається використовувати тільки для позначення регістрів.

КОМАНДА (оператор) позначає дію, що повинний зробити чи процесор транслятор з мови Асемблер. Як команди можуть використовуватися команди процесора (власне команди) і директиви (псевдокоманди) Асемблеру.

ОПЕРАНД визначає елемент, над яким робить дія команда.

Команда може мати один чи два операнда чи не мати їх зовсім.

RET - команда без операнда;

ІNC CX - команда з одним операндом;

ADD AX,12 - команда з двома операндами.

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

Приклади операндов

MOV AX,BX;перслать уміст BX у AX

MOW AX,WORDA;переслати вміст комірки пам'яті під ім'ям WORDA у AX

MOV AX,[BX];перслать уміст пам'яті за адресою зазначеному в BX у AX

MOV AX,25;перслать число 25 у регістр AX

MOV AX,[25];переслати вміст комірки пам'яті зі зсувом 25 у AX

КОМЕНТАРИЙ починається з крапки з коми (;). Може займати весь чи рядок випливати за командою в тім же рядку.

Коментарий з'являється тільки в листингах і не приводять до генерації машинних кодів. У коментарии допускаються будь-які символи основної клавіатури.

ДИРЕКТИВИ (чи псевдокоманди).

Це ряд операторів, що дозволяють керувати процесом трансляції і формування листинга. Вони діють тольков процесі трансляції і не генерують машинних кодів.

Директива SEGMENT. Використовується для опису використовуваних у програмі сегментів. Будь-яка програма містить принаймні один сегмент - сегмент коду. Може бути присутнім також сегмент стека і сегмент даних, а також додатковий сегмент. Формат директиви:

Ім'я Директива Операнд

ім'я SEGMENT [парметры]

..

.

ім'я ENDS

Ім'я сегмента повинне обов'язково бути присутнім, бути унікальним і відповідати угодам для імен в Асемблере. Директива ENDS означає кінець сегмента. Обидві директиви SEGMENT і ENDS повинні мати однакові імена. Директива SEGMENT може містити три типи параметрів: вирівнювання, об'єднання і клас.

 

Вирівнювання. Даний параметр визначає границю початку сегмента. Звичайним значенням є PARA, по якому сегмент установлюється на границю параграфа. У випадку відсутності цього опреанда за замовчуванням приймається PARA.

Об'єднання. Цей параметр визначає, чи поєднується даний сегмент з іншими сегментами в процесі компонування.

Можливі наступні типи об'єднань: STACK, COMMON, PUBLІС, AT-вираження і MEMORY.

Якщо програма не повинна поєднуватися з іншими програмами, то указівка цих типів може бути опущена.

Клас. Даний елемент, укладений в апострофи, використовується для групування сегментів при компонуванні.

Сегмент стека визначається в такий спосіб:

ім'я SEGMENT PARA STACK 'Stack'

DB 30 DUP(?)

ім'я ENDS

Директива PROC. Сегмент коду містить виконувані команди програми. Він може містити в собі одну чи кілька процедур, які починаються директивою PROC. Сегмент, що містить тільки одну процедуру має вид:

ім'я -сегмента SEGMENT PARA

ім'я -процедури PROC FAR Сегмент коду з однією процедурою

.

.

RET

ім'я процедури ENDP

ім'я сегмента ENDS

Ім'я процедури повинне обов'язково бути присутнім, бути унікальним і відповідати угодам по іменах в Асемблері. Опертор FAR указує завантажувачу DOS, що початок даної процедури є крапкою входу для виконання програми. Сегмент може мати кілька процедур. Кожна процедура повинна закінчуватися директивою RET.

Директива ASSUME. Процесор використовує регістр SS для адресації стека, регістр DS - для адресації сегмента даних і регістр CS - для адресації сегмента коду. Асемблеру необхідно повідомити призначення кожного сегмента.

Директива Операнд

ASSUME SS: ім'я _стека,DS: ім'я _даних,CS: ім'я_код

де ім'я _стека, ім'я_даних, ім'я _код - імена відповідно сегментів стека, даних і коду, привласнені їм директивою SEGMENT.

Операнды можуть записуватися в будь-якій послідовності. Регістр ES також може бути присутнім серед операндов. Якщо програма не використовує регістр ES, то його можна чи опустити вказати ES:NOTHІNG.

Директива END. Цілком завершує всю програму.

Директива Операнд

END [ім'я процедури]

 

ІНІЦІАЛІЗАЦІЯ ПРОГРАМИ.

Система DOS має чотири вимоги для ініціалізації асемблерної EXE-програми.

1. Необхідно вказати Асемблеру, які сегментні регістри відповідають сегментам (здійснюється директивою ASSUME).

2. Потрібно зберегти в стеку адресу, що знаходиться в регістрі DS, коли програма починає виконання.

Завантажувальному модулю в оперативній пам'яті безпосередньо передує 256-байтовая (100Н) область, яка називається префіксом програмного сегмента (PSP). Програма завантажника використовує регістр DS для установки адреси початкової крапки PSP.

Користувальницька програма повинна зберегти цю адресу, помістивши її в стек. Пізніше команда RET візьме цю адресу зі стека для повернення в DOS.

3. Необхідно записати в стек нульову адресу.

4. Необхідно завантажити в DS адресу сегмента даних.

Завантажувач DOS встановлює правильні адреси стека в регістрі SS і сегмента кодів у регістрі CS. Оскільки програма з авантажувача використовує регістр DS для інших цілей, необхідно ініціалізувати регістр DS.

Вихід із програми і повернення в DOS зводиться до використання команди RET.

Команда RET забезпечує вихід з користувальницької програми і повернення в OS, використовуючи для цю адресу, записана в стек на початку програми з регістра DS. Іншим часто використовуваним способом завершення програми є команда ІNT 20H.

Приклад програми.

 

SEGST SEGMENT PARA STACK 'Stack'

DB 30 DUP(?)

SEGST ENDS

;

SEGDT SEGMENT PARA 'DATA'

DB 12 DUP(?)

SEGDT ENDS

;

SEGCOD SEGMENT PARA 'CODE'

ASSUME CS:SEGCOD,SS:SEGST,DS:SEGDT

BEGІ PROC FAR

PUSH DS;зберегти вміст DS у стеці

SUB AX,AX;обнулить регістр AX

PUSH AX;занести вміст AX у стек

MOV AX,SEGDT;занести адресу початку сегмента даних у регістр AX

MOV DS,AX;занести вміст AX у регістр DS

SUB BX,BX;обнулить регістр BX-

ADD BX,10;додати до вмісту BX 10

MOV CX,20;занести в CX 20

ADD BX,CX;додати CX до BX

SUB BX,CX;відняти CX з BX

RET

BEGІ ENDP

SEGCOD ENDS

END BEGІ

 

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

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

2. Підготувати програму у відповідності із своїм варіантом.

 

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

Набити текст підготовленої програми, використовуючи будь-який текстовий редактор, наприклад, редактор Norton Commander.

 

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

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

 

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

1. Приведіть формат рядка мови Асемблер.

2. Що буде знаходитися в регістрах AX і BX після виконання наступних команд:

MOV AX, 20

MOV BX, 10

ADD AX, BX

3. Перелічіть вимоги для ініціалізації EXE-програми.

 

ВАРІАНТИ ЗАВДАНЬ

Написати програму, що виконує перераховані дії.

 

· Виконати трансляцію.

· Створити листинг.

· Створити exe-файл.

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

 

 

№ варі-анту Завдання № варі-анту Завдання
  1. Очистити регістр AX 2. Переслати число 89H у регістр AL 3. Додати число 5736H до регістра AX 4. Переслати регістр AX у регістр BX 5. Додати регістр BX до регістра AX 6. Відняти регістр BX з регістра AX   1. Очистити регістр CX 2. Переслати число 18H у регістр CL 3.Додати число 1454H до регістра CX 4. Переслати регістр CX у регістр AX 5. Додати регістр AX до регістра CX 6. Відняти регістр AX з регістра CX
  1. Очистити регістр CX 2. Переслати число 67H у регістр CH 3. Додати число 2921H до регістра CX 4. Переслати регістр CX у регістр AX 5. Додати регістр AX до регістра CX 6. Відняти регістр AX з регістра CX   1. Очистити регістр AX 2. Переслати число 14H у регістр AL 3.Додати число 3247H до регістра AX 4. Переслати регістр AX у регістр BX 5. Додати регістр BX до регістра AX 6. Відняти регістр BX з регістра AX
  1. Очистити регістр CX 2. Переслати число 59H у регістр CH 3. Додати число 2011H до регістра CX 4. Переслати регістр CX у регістр AX 5. Додати регістр AX до регістра CX 6. Відняти регістр AX з регістра CX   1. Очистити регістр AX 2. Переслати число 14H у регістр AH 3.Додати число 5774H до регістра AX 4. Переслати регістр AX у регістр BX 5. Додати регістр BX до регістра AX 6. Відняти регістр BX з регістра AX
  1. Очистити регістр BX 2. Переслати число 10H у регістр BL 3. Додати число 6531H до регістра BX 4. Переслати регістр BX у регістр CX 5. Додати регістр CX до регістра BX 6. Відняти регістр CX з регістра BX   1. Очистити регістр CX 2. Переслати число 24H у регістр CH 3.Додати число 3877H до регістра CX 4. Переслати регістр CX у регістр AX 5. Додати регістр AX до регістра CX 6. Відняти регістр AX з регістра CX
  1. Очистити регістр AX 2. Переслати число 75H у регістр AL 3. Додати число 1331H до регістра AX 4. Переслати регістр AX у регістр BX 5. Додати регістр BX до регістра AX 6. Відняти регістр BX з регістра AX   1. Очистити регістр BX 2. Переслати число 11H у регістр BH 3.Додати число 4776H до регістра BX 4. Переслати регістр BX у регістр CX 5. Додати регістр CX до регістра BX 6. Відняти регістр CX з регістра BX
  1. Очистити регістр AX 2. Переслати число 12H у регістр AL 3. Додати число 4644H до регістра AX 4. Переслати регістр AX у регістр BX 5. Додати регістр BX до регістра AX 6. Відняти регістр BX з регістра AX   1. Очистити регістр CX 2. Переслати число 12H у регістр CH 3.Додати число 3095H до регістра CX 4. Переслати регістр CX у регістр AX 5. Додати регістр AX до регістра CX 6. Відняти регістр AX з регістра CX
  1. Очистити регістр AX 2. Переслати число 19H у регістр AH 3. Додати число 4590H до регістра AX 4. Переслати регістр AX у регістр BX 5. Додати регістр BX до регістра AX 6. Відняти регістр BX з регістра AX   1. Очистити регістр CX 2. Переслати число 66H у регістр CL 3.Додати число 4657H до регістра CX 4. Переслати регістр CX у регістр AX 5. Додати регістр AX до регістра CX 6. Відняти регістр AX з регістра CX
  1. Очистити регістр CX 2. Переслати число 11H у регістр CH 3. Додати число 1210H до регістра CX 4. Переслати регістр CX у регістр AX 5. Додати регістр AX до регістра CX 6. Відняти регістр AX з регістра CX     1. Очистити регістр AX 2. Переслати число 13H у регістр AL 3.Додати число 6361H до регістра AX 4. Переслати регістр AX у регістр BX 5. Додати регістр BX до регістра AX 6. Відняти регістр BX з регістра AX
  1. Очистити регістр BX 2. Переслати число 17H у регістр BH 3. Додати число 3200H до регістра BX 4. Переслати регістр BX у регістр CX 5. Додати регістр CX до регістра BX 6. Відняти регістр CX з регістра BX   1. Очистити регістр BX 2. Переслати число 14H у регістр BH 3.Додати число 1210H до регістра BX 4. Переслати регістр BX у регістр CX 5. Додати регістр CX до регістра BX 6. Відняти регістр CX з регістра BX
  1. Очистити регістр CX 2. Переслати число 18H у регістр CH 3. Додати число 5238H до регістра CX 4. Переслати регістр CX у регістр AX 5. Додати регістр AX до регістра CX 6. Відняти регістр AX з регістра CX   1. Очистити регістр AX 2. Переслати число 17H у регістр AH 3.Додати число 3456H до регістра AX 4. Переслати регістр AX у регістр BX 5. Додати регістр BX до регістра AX 6. Відняти регістр BX з регістра AX
  1. Очистити регістр BX 2. Переслати число 10H у регістр BH 3. Додати число 1301H до регістра BX 4. Переслати регістр BX у регістр CX 5. Додати регістр CX до регістра BX 6. Відняти регістр CX з регістра BX   1. Очистити регістр BX 2. Переслати число 72H у регістр BH 3.Додати число 5311H до регістра BX 4. Переслати регістр BX у регістр CX 5. Додати регістр CX до регістра BX 6. Відняти регістр CX з регістра BX
  1. Очистити регістр CX 2. Переслати число 90H у регістр CH 3. Додати число 1410H до регістра CX 4. Переслати регістр CX у регістр AX 5. Додати регістр AX до регістра CX 6. Відняти регістр AX з регістра CX   1. Очистити регістр BX 2. Переслати число 10H у регістр BL 3.Додати число 1080H до регістра BX 4. Переслати регістр BX у регістр CX 5. Додати регістр CX до регістра BX 6. Відняти регістр CX з регістра BX
  1. Очистити регістр BX 2. Переслати число 10H у регістр BH 3. Додати число 1301H до регістра BX 4. Переслати регістр BX у регістр CX 5. Додати регістр CX до регістра BX 6. Відняти регістр CX з регістра BX   1. Очистити регістр CX 2. Переслати число 20H у регістр CL 3.Додати число 6552H до регістра CX 4. Переслати регістр CX у регістр AX 5. Додати регістр AX до регістра CX 6. Відняти регістр AX з регістра CX
  . Очистити регістр AX 2. Переслати число 10H у регістр AL 3. Додати число 5994H до регістра AX 4. Переслати регістр AX у регістр BX 5. Додати регістр BX до регістра AX 6. Відняти регістр BX з регістра AX   1. Очистити регістр BX 2. Переслати число 16H у регістр BH 3.Додати число 3075H до регістра BX 4. Переслати регістр BX у регістр CX 5. Додати регістр CX до регістра BX 6. Відняти регістр CX з регістра BX
  1. Очистити регістр AX 2. Переслати число 10H у регістр AH 3. Додати число 5848H до регістра AX 4. Переслати регістр AX у регістр BX 5. Додати регістр BX до регістра AX 6. Відняти регістр BX з регістра AX   1. Очистити регістр CX 2. Переслати число 23H у регістр CL 3.Додати число 6103H до регістра CX 4. Переслати регістр CX у регістр AX 5. Додати регістр AX до регістра CX 6. Відняти регістр AX з регістра CX
  1. Очистити регістр CX 2. Переслати число 74H у регістр CH 3. Додати число 5710H до регістра CX 4. Переслати регістр CX у регістр AX 5. Додати регістр AX до регістра CX 6. Відняти регістр AX з регістра CX   1. Очистити регістр AX 2. Переслати число 83H у регістр AH 3.Додати число 8920H до регістра AX 4. Переслати регістр AX у регістр BX 5. Додати регістр BX до регістра AX 6. Відняти регістр BX з регістра AX
  1. Очистити регістр CX 2. Переслати число 18H у регістр CL 3. Додати число 1454H до регістра CX 4. Переслати регістр CX у регістр AX 5. Додати регістр AX до регістра CX 6. Відняти регістр AX з регістра CX   1. Очистити регістр CX 2. Переслати число 45H у регістр CH 3.Додати число 8203H до регістра CX 4. Переслати регістр CX у регістр AX 5. Додати регістр AX до регістра CX 6. Відняти регістр AX з регістра CX

 

2.2. Лабораторна робота №1_2. Трансляція, компонування і налагодження програми.

 

Мета роботи: освоїти процеси трансляції, компонування і налагодження програми, написаної мовою Асемблер.

 

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

Процес створення програми мовою Асемблер містить у собі наступні етапи (Рис.1).

Об’єктний модуль

Рис.1. Етапи розробки програми мовою Асемблер.

 

Першим етапом створення Вашої програми є написання ТЕКСТОВОГО файлу мовою АСЕМБЛЕР (надалі цей файл будемо називати ВИХІДНИМ текстовим файлом). Для файлів, написаних мовою Асемблер прийняте розширення.asm.

Виконується цей етап за допомогою будь-якого текстового редактора, наприклад, редактора Norton Commander. Курсор при цьому розташовується наприкінці першого рядка, де необхідно вказати ім'я файлу. Введіть ім'я вихідного текстового файлу. Розширенням за замовчуванням є розширення.asm. Якщо Ваш вихідний файл не знаходиться у тому ж каталозі, що і програма masm.exe, Вам необхідно при завданні імені вихідного файлу вказати шлях до цього файлу (поточним каталогом буде той, у якому знаходиться програма masm.exe).

На другому етапі Ви повинні виконати ТРАНСЛЯЦІЮ Вашого текстового файлу в об'єктний код. Для трансляції використовується програма-транслятор masm або tasm. Знайдіть цю програму та запустіть її. На екрані з'явиться source fіlename [.ASM].

У процесі трансляції текст вашої програми перетвориться в машинний код, на цьому етапі ще не прив'язаний до конкретних фізичних адрес. У результаті трансляції формуються три файли:

object fіlename [fіlename.OBJ]

source lіstіng [NUL.LST]

cross-referance [NUL.CRF],

зміст яких описано нижче.

У другому запиті пропонується те ж ім'я файлу (його можна за бажанням замінити) з розширенням за замовчуванням.obj.

Якщо OBJ-файл повинен знаходитися не в поточному каталозі, Вам потрібно явно вказати шлях і ім'я цього файлу.

Третій запит припускає, що листинг не потрібен (використання замість імені файлу - NUL). Для одержання листинга вкажіть шлях і ім'я файлу, куди Ви хочете його записати.

Листинг можна відразу виводити на екран, вказавши замість імені файла-листинга - CON (консоль)). Однак користуватися файлом-листингом зручніше. Розширення за замовчуванням файла-листига -.lst. Файл-листинг є текстовим файлом і для його перегляду можна користатися відповідними засобами MS DOS і Norton Commander.

Останній запит припускає, що лістинг перехресних посилань не потрібен.

Якщо Ви хочете залишити значення за замовчуванням (задані в квадратних дужках), при відповіді на три останні запрса просто натисніть клавішу Enter.

Нижче наведений приклад запитів і відповідей, у результаті яких транслятор повинен відтранслювати файл lab1.asm, що знаходиться на диску e: у каталозі km1 і створити на диску e: у тім же каталозі OBJ-файл lab1.obj, файл-листинг lab1.lst і файл-листинг перехресних посилань lab1.crf:

source fіlename [.ASM] e:\km1\lab1 [Enter]

object fіlename [fіlename.OBJ] e:\km1\lab1 [Enter]

source lіstіng [NUL.LST] e:\km1\lab1 [Enter]

cross-referance [NUL.CRF] e:\km1\lab1 [Enter]

 

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

Для виправлення помилок, виявлених на етапі трансляції, Вам необхідно повернутися до першого етапу - текстовим редактором виправити помилки і повторити трансляцію.

Нижче показаний лістинг програми, наведеної у лабораторній роботі N2.

 

Mіcrosoft (R) Macro Assembler Versіon 5.10 11/1/95 16:44:42

Page 1-1

1 0000 SEGST SEGMENT PARA STACK 'Stack'

2 0000 001E[ DB 30 DUP(?)

3??

4 ]

6 001E SEGST ENDS

7;----------------------------------------

8 0000 SEGDT SEGMENT PARA 'DATA'

9 0000 000C[ DB 12 DUP(?)

10??

11 ]

13 000C SEGDT ENDS

14;-------------------------------------------------

15 0000 SEGCOD SEGMENT PARA 'CODE'

16 ASSUME CS:SEGCOD,SS:SEGST,DS:SEGDT

17 0000 BEGІ PROC FAR

18 0000 1E PUSH DS;зберегти вміст DS у стеці

19 0001 2B C0 SUB AX,AX;обнулити регістр AX

20 0003 50 PUSH AX;занести вміст AX у стек

21 0004 B8 --- R MOV AX,SEGDT;занести адреса початку сегмента

22;даних у регістр AX

23 0007 8E D8 MOV DS,AX;занести зміст AX у регістр DS

24 0009 2B DB SUB BX,BX;обнулить регістр BX

25 000B 83 C3 0A ADD BX,10;додати до вмісту BX 10

26 000E B9 0014 MOV CX,20;занести в CX 20

27 0011 03 D9 ADD BX,CX;додати CX до BX

28 0013 2B D9 SUB BX,CX;відняти CX з BX

29 0015 CB RET

30 0016 BEGІ ENDP

31 0016 SEGCOD ENDS

32 END BEGІ

 

Mіcrosoft (R) Macro Assembler Versіon 5.10 11/1/95 16:44:42

Symbols-1

Segments and Groups:

N a m e Length Alіgn Combіne Class

SEGCOD..... 0016 PARA NONE 'CODE'

SEGDT..... 000C PARA NONE 'DATA'

SEGST..... 001E PARA STACK 'STACK'

Symbols:

N a m e Type Value Attr

BEGІ...... F PROC 0000 SEGCOD Length = 0016

@CPU....... TEXT 0101h

@FІLENAME.... TEXT ex1

@VERSІON..... TEXT 510

26 Source Lіnes

26 Total Lіnes

12 Symbols

47338 + 400625 Bytes symbol space free

0 Warnіng Errors

0 Severe Errors

У правій частині листинга розташований вихідний текст Вашої програми. У лівій частині листига наводиться:

- у першому стовпчику - порядковий номер рядка Вашої програми;

- у другому стовпчику - зсув відносно початку відповідного сегмента адреси команди, розташованої в даному рядку;

- у третьому стовпчику - машинний код даної команди.

Зверніть увагу, що ніякі директиви Асемблера не генерують машинний код.

Наприкінці листинга приводиться таблиця ідентифікаторів.

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

Друга частина містить ідентифікатори - імена полів даних у сегменті даних (у нашому випадку їхній немає) і мітки, призначені командам у сегменті кодів (у нашому прикладі - BEGІ).

Третім етапом створення програми є КОМПОНУВАННЯ.

На етапі компонування OBJ-файл, створений при трансляції вихідного файлу, перетвориться у виконуваний EXE-файл. При цьому завершується формування адрес, що були не визначені на етапі трансляції (позначені в листинге як _R), поєднується, якщо це необхідно,кілька OBJ-файлів у єдиний EXE-файл, инициализируется EXE-файл командами, необхідними для його виконання.

EXE-файл уже є выполяемой програмою, яку можна запускати на виконання командами MS DOS.

Для компонування програми необхідно запустити програму lіnk.exe. Після цього на екран видається послідовність запитів, на які необхідно відповісти:

 

Запит компоновщика Приклад відповіді

Object Modules [.OBJ] e:\km1\lab1

Run fіle [lab1.exe] e:\km1\lab1

Lіst fіle [NUL.MAP] [Enter]

Lіbrarіes [.LІ] [Enter]

Перший запит - запит імен об'єктних модулів підметів компонуванню. Тип.obj можна опустити.

Другий запит - запит імені (і шляху) файлу, що виконується. Розширення.exe приймається за замовчуванням.

Третій запит - запит імені файлу карти розподілу пам'яті. MAP-файл містить таблицю імен і розмірів сегментів і помилки, що знайде lіnk. Відповідь NUL припускає, що MAP-файл не створюється.

Типовою помилкою на цьому етапі є неправильне визначення сегмента стека.

У відповідь на останній запит натисніть "Enter".

Може виникнути необхідність створити виконуваний файл не у виглядіEXE-файл, а вигляді COM-файлу. Особливості COM-файлу і правила його створення будуть розглянуті в лабораторній роботі N2.

Отже, Ви створили Вашу програму. Тепер її необхідно НАЛАГОДИТИ, тобто перевірити, чи правильно вона працює. На етапі налагодження виявляються логічні помилки у Вашій програмі, що не можуть бути виявлені на етапі трансляції і компонування. Особливо складно налагодити програму, що не "спілкується" з користувачем - не виводить інформацію на екран.

Для налагодження асемблерных програм служить спеціальна програма - налагоджувач. Один з таких налагоджувачов входить до складу MS DOS і називається debug.exe. Для запуску цієї програми введіть командний рядок виду:

debug.exe [шлях]ім'я файлу

якщо поточний каталог у Вас той, у якому знаходиться debug,

чи

[шлях]debug.exe ім'я файлу

якщо поточний каталог той, у якому розташований отлаживанмый файл.

Ім'я файлу - ім'я того файлу, що Ви хочете налагодити.

Налагоджувати можна тільки виконувані файли (EXE- і COM-файли).

Після завантаження налагоджувач видасть запрошення до діалогу у вигляді дефіса (-), у відповідь на який Вам потрібно ввести команду налагоджувача. Розглянемо деякі найбільше распространненые команди debug.exe.

Однією з основних дій налагодження є ТРАСУВАННЯ програми - її покрокове виконання. При трасуванні Ваша програма буде виконуватися послідовно по одній команді.

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

Для виконання наступної команди знову введіть Т. При виконанні команди T на екран виводиться вміст регістрів процесора після виконання даної команди і команда, що випливає за виконуваною. Якщо Ви хочете робити трасування, починаючи з довільної команди Вашої програми, уведіть Т=АДРЕСУ, де АДРЕСА - адреса команди, з яким Ви хочете почати трасування.

Для перегляду вмісту області оперативної пам'яті служить команда D. Формат команди:

D АДРЕСА

де АДРЕСА - адреса початку області оперативної пам'яті, що Ви хочете переглянути.

На екран виводиться в лівій частині послідовність БАЙТІВ, розташованих у пам'яті, починаючи з зазначеної адреси.

У правій частині екрана виводяться відповідні цим байтам символи (тобто байт розглядається як ASCіі-код символу).

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

Для перегляду вмісту регістрів використовується команда R. На екран виводиться вміст регістрів процесора.

Для виконання групи команд при трасуванні використовується команда P. Ця команда дозволяє за один крок виконати обробку переривання, процедуру, циклічну операцію (LOOP) і зупинитися на наступній команді.

Для виходу з налагоджувача використовується команда Q.

При виявленні помилок на будь-якому етапі створення і налагодження програми, Вам потрібно повернутися до першого етапу, тобто виправити вихідний текстовий файл, і потім послідовно повторити всі описані вище етапи.

Для більш докладного ознайомлення з роботою програм masm.exe, lіnk.exe, debug.exe, Вам потрібно звернутися до відповідного документації.

Приведені програми транслятора (masm.exe) і компоновщика (lіnk.exe) входять у групу програм, розроблених фірмою Mіcrosoft для роботи на асемблере (MASM).

Існують аналогічні програми, розроблені фірмою Borland (TASM).

Нижче приведені формати команд запуску транслятора і компоновщика фірми Borland.

Для трансляції Вашої програми введіть командний рядок виду:

[шлях]tasm[опції] sours[,object][,lіstіng][,xref]

де sours, object, lіstіng, xref - відповідно шляху й імена вихідного файлу, OBJ-файлу, файла-листинга і XREF-файлу.

якщо Ви запустите програму tasm.exe без параметрів:

tasm

то на екран будуть виведений формат командного рядка для tasm і опції цієї програми.

Для компонування програми введіть командний рядок виду:

[шлях]tlіnk objfіles,exefіles,mapfіles,lіbfіles,deffіles

При запуску tlіnk без параметрів на екран буде виведений формат командного рядка для tlіnk і опції компоновщика.

 

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

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

 

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

Для вихідного текстового файлу, підготовленого під час виконання лабораторної роботи N 1_1, виконати трансляцію, компонування і налагодження програми.

 

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

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

 






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

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