Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод вказів лаборат роб Опер сист.doc
Скачиваний:
11
Добавлен:
08.02.2016
Размер:
1.41 Mб
Скачать
    1. Лабораторна робота №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 ]

5

6 001E SEGST ENDS

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

8 0000 SEGDT SEGMENT PARA 'DATA'

9 0000 000C[ DB 12 DUP(?)

10 ??

11 ]

12

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, виконати трансляцію, компонування і налагодження програми.

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

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