Головна

Програма типу EXE на макроассемблере

  1. A) ОЖ, программали? ?аби?шалар, утіліттер, сервістік программалар
  2. A) Прикладним програмами
  3. Air Alert III - програма для розвитку стрибка
  4. I. РОБОЧА ПРОГРАМА ДИСЦИПЛІНИ
  5. I. РОБОЧА ПРОГРАМА ДИСЦИПЛІНИ
  6. II. НАВЧАЛЬНА ПРОГРАМА
  7. III. Навчальна програма

1. У наших роботах ми будемо використовувати макроассемблер фірми Microsoft (masm) і турбоассемблер фірми Borland (tasm), а транслятор, компонувальник і відладчик - tasm.exe, tlink.exe і td.exe, відповідно, фірми Borland. Останні можуть працювати з обома асемблер.

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

Сегмент утворюється директивою segment, Яка має такий вигляд:

імя_сегмента segment [параметри]

...

...

імя_сегмента ends

Ім'я може бути довільним, але відповідати угодам для імен. директивою ends закінчується сегмент. У директиви segment може бути три типи параметрів: вирівнювання, об'єднання і клас.

Функціонально розрізняються три сегменти.

А). Сегмент коду, в якому міститься основна послідовність команд (кодів), що виконує ті функції, для яких, власне, і призначена програма. У сегменті коду може міститися одна або більше процедур (аналог функцій мови С ++). Процедури утворюються директивою proc, Яка має такий вигляд:

імя_процедури proc [параметр]

...

...

імя_процедури endp

Б). Сегмент даних, в якому містяться дані, необхідні для роботи програми, резервуються місця в пам'яті для запису розрахованих значень, масивів і т. Д.

В). Сегмент стека - обов'язкова для кожної програми область пам'яті, куди для тимчасового зберігання заносяться адреси і дані, що виникають під час виконання програми. Обсяг стека резервується, як правило, програмістом. Чим складніше програма, тим більше потрібно обсяг стека. Для простих програм достатній обсяг в 128 ? 256 слів.

При використанні транслятора фірми Microsoft, в сегменті коду обов'язкова присутність директиви assume,яка пов'язує сегментні регістри CS, DS, ES і SS з іменами відповідних сегментів.

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

mov AX, імя_сегмента_данних

mov DS, AX,

за допомогою яких в регістр DS завантажується сегментна адреса сегменту даних. Зверніть особливу увагу на ці два рядки: їх відсутність в тексті програми або розташування не в тому місці програми може викликати небажані і сумні наслідки для Вашого комп'ютера, аж до перезавантаження системи.

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

Отже, наберіть текст наведеної нижче програми (для прискорення процесу набору без приміток) і запишіть його у вигляді файлу z1_pr1.asm в Вашу директорію. Зверніть увагу на сегментну структуру програми.

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

; ================================================= ================

title Програма 1 (типу EXE); ім'я текстового файлу - z1_pr1.asm

;---

; Визначення

stdout equ 1

lf equ 10; код ASCII перекладу рядка

cr equ 13; код ASCII повернення каретки

;---

text segment 'code'; початок сегмента, що містить текст; програми - сегмент коду з ім'ям text

assume cs: text, ds: data, es: data, ss: stack; регістри cs, ds, es, ss; пов'язані з відповідними сегментами

myproc proc; початок процедури по імені myproc

mov AX, data; инициализируем сегментний регістр DS

mov DS, AX

; Висновок на екран рядки тексту "Працюєш на ПК - вивчи асемблер"

mov AH, 40h; номер функції виведення в байт AH

mov BX, stdout; дискриптор монітора в регістр BX

mov CX, meslen; довжину повідомлення в регістр CX

mov DX, offset mes; адреса (зсув) mes в регістр DX

int 21h; переривання MS DOS, яке при

; Наявності функції 40h в байті AH

; Виводить рядок на екран

; Завершення програми - повернення в батьківський процес

outprog: mov AH, 4Ch; номер функції завершення в AH

mov AL, 00h; код завершення

int 21h; переривання MS DOS, яке при

; Наявності функції 4Сh в байті AH

; Забезпечує повернення в систему

myproc endp; кінець тіла процедури

text ends; кінець сегмента коду

;---

data segment; початок сегмента даних

mes db 'Працюєш на ПК - вивчи асемблер', cr, lf

meslen equ $ -mes; в meslen довжина виведеного повідомлення

data ends; кінець сегмента даних

;---

stack segment stack 'stack'; початок сегмента стека

dw 128 dup (0); для стека виділено 128 слів

stack ends; кінець сегмента стека

;---

end myproc; кінець програми

; ================================================= ================

2. Проведіть трансляцію і компоновку Вашої програми. Якщо є повідомлення про помилки, виправте їх. Команди виклику транслятора і компоновщика наведені нижче.

Формат командного рядка для запуску tasm.exe наступний:

tasm [опції] імя_ісходного_файла [, імя_об'ектного_файла]

[, Імя_файла_лістінга] [, імя_файла_перекрестних_ссилок]

tasm / z / zi / n z1_pr1, z1_pr1, z1_pr1 - можлива команда трансляції програми z1_pr1.asm.

Опція / z забезпечує включення в об'єктний файл інформації для налагодження.

Опція / zi дозволяє при наявності помилок поряд з повідомленнями про них виводити відповідні рядки тексту.

Опція / n пригнічує висновок в файл лістингу таблиці ідентифікаторів, що скорочує розмір лістингу.

Ті, хто стоїть далі параметри визначають імена модулів: вихідного (z1_pr1.asm), об'єктного (z1_pr1.obj) і лістингу (z1_pr1.lst).

Формат командного рядка запуску компоновщика:

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

[, Імя_файла_карти] [, імя_файла_бібліотекі]

tlink z1_pr1, z1_pr1 - можлива команда компонування z1_pr1.obj. Параметри, що стоять після tlink, позначають імена модулів: об'єктного (z1_pr1.obj) і завантажувального (z1_pr1.exe).

3. Запустіть програму на виконання:

z1_pr1.exe - команда запуску виконуваного модуля.

Повинна бути виведений рядок тексту. Замініть пропонований текст на інший і знову запустіть програму на виконання.

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

5. Запустіть відладчик td.exe і завантажте в нього виконуваний модуль z1_pr1.exe. Усунення несправностей дозволяє виконувати програму по кроках або з точками зупинки, виводити на екран вміст регістрів і областей пам'яті, модифікувати (в певних межах) завантажену в пам'ять програму, змінювати вміст регістрів і виконувати інші дії, що дозволяють в наочній і зручній формі налагоджувати програми.

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

 



Організація роботи з асемблером | Програма типу com на макроассемблере

заняття 1 | Спрощені директиви сегментації | самостійні розробки | умовні переходи | Переходи з допомогою команди CALL | Mess1 db 0Ah, 0Dh | Sub AX, AX. | Jmp outprog; На завершення програми | Режими адресації. Дані. Робота з масивами | Програма пошуку елемента в масиві |

© um.co.ua - учбові матеріали та реферати