Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
asm.doc
Скачиваний:
6
Добавлен:
09.11.2019
Размер:
913.41 Кб
Скачать

3. Основні вимоги при створенні програми. Приклади простих програм мовою асемблера.

Основним типом завантажувальних програм є тип EXE. При створення EXE-програм необхідно щоб виконувалися вимоги ініціалізації програми та виходу з програми. Для ініціалізації EXE-програми написаної мовою Асемблера необхідно:

  1. вказати Асемблеру, які сегментні регістри повинні відповідати сегментам програми;

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

  3. записати в стек нульовий адрес( тобто значення нуль);

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

Вихід із програми та повернення до операційної системи здійснюється із головної процедури, або головного фрагменту коду за допомогою команди RET. Головною процедурою вважаться процедура ім’я якої вказано в директиві END. Головним фрагментом коду вважаться код в якому знаходиться мітка, що вказана в директиві END. Також вихід із програми з будь-якого фрагменту програми можна здійснити за допомогою переривань.

Розглянемо два приклади оформлення програм мовою асемблера.

Приклад 1. Програма без використання процедур.

title Begin1.asm

Code Segment para 'code' ; Опис початку сегменту.

Assume CS:Code,DS:Code ; Повідомлення асемблеру про використання

; сегментних регістрів.

Begin: push DS ; Запис DS в стек для повернення.

sub AX,AX ; Записати в AX нуль.

push AX ; Записати нуль у стек.

mov AX,Code ; Записати у регістр адресу сегменту Code.

mov DS,AX ; Ініціалізація сегментного регістра.

nop ; Тут буде заходися код програми.

mov AX,a ; Наприклад : b присвоїмо а.

mov b,AX

retf ; Повернення в OS.

a dw 1eh

b dw ?

Code Ends ; Кінець сегменту.

End Begin ; Завершення програми мовою асемблера та

; мітка точки входу в програму при її виконанні.

Приклад 2. Програма з використанням процедур.

title Begin2.asm

Data Segment para 'data'

a db 1eh

b db 30

c db ?

Data Ends

Code Segment para 'code'

Assume CS:Code,DS:Data, ES:Nothing

Begin Proc Far ; Головна процедура.

push DS

sub AX,AX

push AX

mov AX,Code

mov DS,AX

mov AL,a ; Код програми в якому

mov AH,b ; обчислюємо вираз

add AL,5fh ; с=а*5fh-b*96.

add AH,96

sub AL,AH

mov c,AL

ret ; Повернення з процедури.

Endp ; Директива завершення процедури.

Code Ends

End Begin

4. Трансляція програми. Опції компіляції та загальна характеристика.

Загальна схема розробки програми мовою асемблера наступна. На першому кроці вводиться код програми, для підготовки якого можна використовувати будь-який текстовий редактор, який підтримує ASCII формат кодування. Основною вимогою до редактора, щоб він не вставляти сторонніх символів, які не входять до алфавіту мови асемблера. Після введення тексту програми, в текстовому редакторі, його необхідно зберегти на жорсткому або гнучкому диску в файлі з розширенням *.asm. Отриманий файл називають файлом вихідного коду програми мовою асемблера.

Наступним кроком є трансляція(компіляція) програми. На цьому кроці формується об'єктний модуль, який містить представлення вихідної програми в машинних кодах і деяку додаткову інформацію, необхідну для налагодження і компонування програми.

Для розробки програм мовою асемблера будемо використовувати пакет Turbo Assembler. В даному пакеті трансляція програм написаних мовою асемблера(розроблена програма повинна знаходяться у файлах з розширенням .asm) здійснюється за допомогою транслятора tasm.exe. Командний рядок транслятора має наступну структуру:

tasm [опція] [ім'я_вихідного_файлу][,ім'я_об’єктного модуля] [, ім'я_файлу_роздруку][, ім'я_ файлу_перехресних_посилань]

У результаті успішної роботи транслятора на диску можуть будуть створені такі типи файлів:

  • з розширенням .obj - об'єктний файл;

  • з розширенням .lst - файл роздруку;

  • з розширенням .xrf - файл перехресних посилань.

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

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

Файл роздруку містить інформацію про програму у такому виді

<глибина_вкладеності><номер_рядка><зсув><машинний_код><вихідний_код>

де :

<глибина_вкладеності >

рівень вкладеності файлів, що включаються, або макрокоманд у файлі

<номер_рядка >

номер рядка у файлі роздруку, але не в програмі, використовується для локалізації помилок і формування таблиці перехресних посилань;

<зсув>

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

<машинний_код>

Машинне представлення команди мови Асемблера, яка записана в полі <вихідний_код>

<вихідний_код>

Рядок коду вихідної програми.

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

Для компілятора tasm.exe використовуються наступні опції :

  • /а, /s - порядок включення сегментів в об'єктному файлі, /а – згідно імен латинського алфавіту, /s – згідно опису в програмі;

  • /c - вказівка для включення у файл роздруку інформації про перехресні посилання;

  • /e - генерація інструкцій емуляції операцій із плаваючою крапкою;

  • /r - дозвіл інструкцій із плаваючою крапкою;

  • /h,/? - виведення на екран довідкової інформації ;

  • шлях - визначає шлях до файлів, які включається за директивою INCLUDE ;

  • /j директива _TASM - визначає директиви, що будуть транслюватися перед початком трансляції вихідного файлу;

  • /khn - задає максимальна кількість ідентифікаторів, що може містити вихідна програма;

  • /l - указує на необхідність видачі роздруку, навіть якщо він не був викликаний у командному рядку;

  • /ml - розрізняти у вихідному коді великі та малі букви;

  • /mx - розрізняти великі та малі букви в зовнішніх і загальних ідентифікаторах;

  • /mu - сприймати всі символи як прописні;

  • /mvn - визначення максимальної довжини ідентифікаторів;

  • /mn - установка кількості проходів транслятора. За замовчуванням виконується один прохід, максимально 5.

  • /n - не видавати у файлі роздруку таблиці ідентифікаторів;

  • /os - генерація оверлейного коду;

  • /p - перевіряти наявність коду з побічними ефектами при роботі в захищеному режимі;

  • /q - видалення з об'єктного коду зайвої інформації(наприклад інформації про налагодження);

  • /t – забороняти виведення всіх повідомлень при умовній трансляції, крім повідомлень про помилки;

  • /w0-w2 - генерація попереджуючих помилок різного ступеня повноти;

  • w0 - повідомлення не генеруються;

  • w1,w2 - повідомлення генеруються;

  • /x - включати в роздрук усі блоки умовної трансляції для директив;

  • /z - при виникненні помилок поряд з повідомленнями виводити відповідні рядки тексту;

  • /zi - включати в об'єктний файл інформацію для налагодження;

  • /zd - розмістити в об'єктний файл інформацію про номери рядків, які необхідні для роботи налагоджувача на рівні вихідного тексту програми;

  • /zn - заборонити розміщення в об'єктний файл інформації налагодження.

У програмі також можуть містяться директиви керування виведенням роздруку:

  • %PAGESIZE [число рядків][,число стовпців] - задає висоту і ширину файлу роздруку і починає його нову сторінку(число рядків - задає число рядків, виведених на одній сторінці роздруку, число стовпців - може знаходиться в діапазоні 59-255 і задає число стовпців на сторінці),

  • %BIN < розмір > - встановлює довжину поля об'єктного коду,

  • %LINENUM < розмір > - задає розмір поля для номерів рядків,

  • %TRUNC - усікання довгих полів роздруку,

  • %TITLE "текст" - задає заголовок файлу роздруку.

Наведемо приклад компіляції :

C:\Tasm> tasm begin1.asm

В результаті отримуємо об’єктний файл begin1.obj.

5. Компонування програм. Опції компонування програми Створення завантажувального модуля.

Крок компонування є наступним кроком, після одержання об'єктного коду вихідної програми, створення завантажувального модуля(програми). Основна мета кроку компонування налагодженням зв’язків між об’єктними файлами програми та об’єктними файлами бібліотеки та перетворення цих об'єктних файлів у один завантажувальний модуль(готову програму).

Командний рядок програми компонування має наступну структуру:

tlink.exe [опція] список_об'єктних_файлів [,ім'я_завантажувального_ модуля] [,ім'я_файлу карти] [,шлях_до_файлів_бібліотеки]

У цьому списку:

список_об'єктних_файлів - задає список об’єктних файлів які компонуються. Файли повинні мати розширення *.obj та розділені пробілами або знаком +.

ім'я_завантажувального_модуля – визначає ім’я завантажувального модуля. Параметр необов'язковий. Якщо параметр відсутній, тоді його ім'ям буде визначатися за першим іменем зі списку об'єктних модулів.

ім'я_файлу_карти – визначає файл, в який заноситься інформація про імена які використані в програмі, адреси завантаження, розміри всіх сегментів які входять у програму, тощо. Параметр необов'язковий.

шлях_до_файлів_бібліотеки - задає шлях до файлів бібліотеки.

Параметр необов'язковий. Бібліотека представляє набір готових до використання об’єктних модулів, які розповсюджуються з пакетом Turbo Assembler, або розроблені користувачем. Файли бібліотеки мають розширенням *.lib. Користувач може створити власну бібліотеку з готових та налагоджених модулів за допомогою утилітою TLIB з пакета Turbo Assembler.

Програма компонування tlink.exe має такі опції :

  • /x - не створювати файлу карти .map;

  • /m - створити файл карти .map ;

  • /v - включити інформацію налагодження у завантажувальний файл (готову програму);

  • /3 - підтримка 32-бітного коду;

  • /t - створити файл типу .com ( за замовчуванням .exe).

Наведемо приклад створення завантажувального модуля :

C:\Tasm> tlink.exe begin1.obj

В результаті отримуємо завантажувальним модуль Begin1.exe.

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