Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
method_SP2010.pdf
Скачиваний:
26
Добавлен:
12.05.2015
Размер:
270.78 Кб
Скачать

Лабораторний практикум № 1

Тема: створення програм на асемблері.

1.1 Загальні положення

Будь-який сучасний мікропроцесор, за допомогою шести сегментних регістрів, може одночасно працювати:

з одним сегментом коду;

одним сегментом стеку;

одним сегментом даних;

трьома додатковими сегментами даних.

Фізично кожен сегмент являє собою сектор пам’яті, що зайнята командами або даними, адреси яких вираховуються відносно значення у відповідному сегментному регістрі.

У найпростішому випадку програма написана на асемблері складається з опису трьох сегментів: стеку, даних та коду. Такий розподіл пам’яті дуже важливий, оскільки інакше компілятор, що не може відрізнити данні від команд, буде все сприймати як команди.

Синтаксично сегмент описується наступним чином:

Ім’я_сегменту SEGMENT тип_вирівнювання тип_комбінування клас_сегмента тип_розміру_сегмента

директиви асемблера

 

команди асемблера

 

макрокоманди асемблера

 

коментарі

 

 

Ім’я сегменту

ENDS

Для процесорів і80386 та вище сегменти можуть бути 16або 32-разрядними. Це впливає перш за все на розмір сегмента і на формування фізичної адреси у ньому. Атрибут розміру сегмента може приймати значення:

USE16 – ознака того, що сегмент дозволяє 16-разрядну адресацію. При формуванні фізичної адреси може бути використано лише 16-разрядне зміщення. Такий сегмент може містити до 64 Кбайт коду або даних.

USE32 – сегмент буде 32-разрядним. При формуванні фізичної адреси може бути використано 32-разрядне зміщення. Отже, такий сегмент може містити до 4 Гбайт

коду або даних.

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

Сегмент коду складається з процедур. Однієї головної, з якої починається виконання програми, та допоміжних. Описується процедура наступним чином:

Ім’я_процедури PROC [відстань]

[ARG

список аргументів]

[RETURNS список аргументів]

[LOCKAL

список аргументів]

[USES

список регістрів]

група команд;

директиви асемблера;

коментарі тощо;

[ret] [число]

Ім’я_процедури ENDP

5

Отже обов’язковим є задання імені процедури. Атрибут відстань може приймати значення near або far і характеризує можливість звернення до процедури з іншого сегмента коду. Головна процедура завжди має бути far. Виклик процедури здійснюється командою call ім’я_процедури. Команда ret [число] повертає управління програмі, що здійснює виклик. [число] – необов’язковий параметр, що зазначає кількість елементів, які видаляються зі стеку при поверненні з процедури.

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

Програма 1.1

STSEG SEGMENT PARA STACK “STACK” DB 64 DUP ( “STACK” )

STSEG ENDS

DSEG SEGMENT PARA PUBLIC “DATA”

SOURCE DB 10, 20, 30, 40

DEST DB 4 DUP ( “?” )

DSEG ENDS

CSEG SEGMENT PARA PUBLIC “CODE”

MAIN PROC FAR

ASSUME CS: CSEG, DS: DSEG, SS: STSEG

;адреса повернення

PUSH DS

MOV AX, 0 ; або XOR AX, AX

PUSH AX

;ініціалізація DS

MOV AX, DSEG

MOV DS, AX

;обнуляємо масив

MOV DEST, 0 MOV DEST+1, 0 MOV DEST+2, 0 MOV DEST+3, 0

;пересилання

MOV AL, SOURCE MOV DEST+3, AL MOV AL, SOURCE+1 MOV DEST+2, AL MOV AL, SOURCE+2 MOV DEST+1, AL MOV AL, SOURCE+3 MOV DEST, AL

RET

MAIN ENDP

CSEG ENDS

END MAIN

Виконання програми на асемблері на ЕОМ складається з таких етапів:

1) створення текстового файлу типу .asm у будь-якому текстовому редакторі;

6

2)компіляція створеного файлу, в результаті чого одержуємо об’єктний файл типу

.obj. За бажанням користувача, можна створити допоміжний файл лістингу типу .lst, де наводяться зміщення кожної команди або даних, машинні коди команд та діагностуються помилки трансляції;

3)компонування об’єктного файлу, в результаті чого отримуємо або багатосегментний

.exe-файл, або односегментний .com-файл. Додатково можна одержати карту пам’яті або .map-файл, де зазначено, як скомпоновано програму – початкові та кінцеві адреси кожного сегменту;

4)завантаження та виконання програми.

Компіляція .asm-файла здійснюється програмою tasm.exe, а компонування .obj-файлу – компоновником tlink.exe.

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

Налагодження програми можна здійснювати за допомогою універсального налагоджувача td.exe, який обробляє її .exe-файл. Щоб встановити відповідність між командами .exe-файлу та початковим .asm, потрібно створити спеціальні таблиці. Тому до

.obj- та .exe-файлів програми треба включати додаткову інформацію для налагоджувача. Команда компілятора має таку структуру

tasm [опції] source [,object][,listing],

де source – ім’я .asm-файлу; object – ім’я .obj-файлу; listing - ім’я .lst-файлу;

елементи в дужках є необов’язковими.

Якщо відсутні object та listing, то імена відповідних файлів будуть такі ж, як і ім’я

.asm-файлу.

Для створення .lst-файлу до команди треба включити опцію /l, а для налагоджувача – опцію /zi.

Команда компоновника має таку структуру tlink objfiles [,exefile][,mapfile],

де objfiles – імена об’єктних файлів; exefile – ім’я .exe-файлу;

mapfile - ім’я файлу карти пам’яті.

При відсутності двох останніх компонентів їх імена визначаються ім’ям об’єктного файлу.

Для створення .map-файлу до команди треба включити опцію /m, для налагоджувача – опцію /v, для створення не .exe-файлу, а .com-файлу до команди включається опція /t.

Після виправлення всіх помилок компіляції та компонування одержану .exe програму можна налагоджувати за допомогою td.exe.

Ця програма використовує графічний інтерфейс, який дуже схожий на середовище Turbo Pascal або Borland C. Головне меню складається з кількох розділів. Завантаження програми до налагоджувача можна здійснити через розділ File.

З розділу перегляду View доцільно використовувати режим DUMP (розміщення програми в пам’яті), розділ CPU, в якому фактично одночасно є п’ять вікон. Переміщуватися по вікнах у напрямі годинникової стрілки слід за допомогою клавіші Tab, а в протилежному напрямку – Shift-Tab.

Кожне вікно має локальне меню, яке можна зробити доступним клавішами Alt+F10 або

Ctrl+F10.

7

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]