Главная страница

 

ДОМ
ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

Информатика и программирование
Информационные технологии
Компьютерные сети
Информационная безопасность
Как заработать в сети Интернет
Информационные технологии
CASE-технологии
Программные средства
Низкоуровневое программирование
Модели данных
Структуры данных
Низкоуровневое программирование

ПРОГРАМУВАННЯ НА МОВІ НИЗЬКОГО РІВНЯ

 

Етапи створення програми на асемблері

Згадаємо основні положення.

Двійкове представлення команд МП називають машинною мовою.
Символічне позначення всіх команд МП називають мовою Асемблера
Програма-транслятор, яка переводить програму з асемблера на машинну мову, називається асемблером (турбоасемблером ТАSM).

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

Етапи створення програми на мові Асемблера:

  1. підготовка (або внесення змін) вихідного тексту програми;
  2. асемблування програми (отримання об'єктного коду);
  3. компоновка програми (отримання виконавчого файла програми);
  4. налагодження програми (виправлення помилок).

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

Підготовка тексту програми
Текст програми на Асемблері записується в один чи декілька текстових файлів. Імена файлів і їх розширення можуть бути будь-які, але прийнято використовувати розширення *.asm. Ці файли є текстовими, їх можна підготовити за допомогою будь-якого текстового редактора і зберігати у вигляді звичайних файлів у форматі ASCII.

Асемблування програми
Підготовлений текст програми є вихідними даними для програм, які називаються асемблерами (наприклад програма Tasm). Завдання цієї програми - перетворити текст програми у форму двійкових команд, які може виконати МП. Після асемблування отримують файли об'єктних модулів, що мають розширення *.obj.

Компоновка програми У випадках, коли текст програми знаходиться у декількох файлах і спільно використовуються змінні, описані у цих файлах, обов'язково потрібно включити етап компоновки. Процес об'єднання об'єктних модулів в один файл здійснюється спеціальною програмою-компоновником (наприклад програма Tlink). Результатом компоновки є виконавчі файли, що мають розширення *.com, *.exe.

Налагодження програми
Будь-яка програма потребує налагодження (виправлення помилок). Сучасні налагоджувальні програми (наприклад програми Debug, TurboDebugger) дозволяють у процесі виконання програми контролювати значення регістрів загального призначення чи змінних, змінювати їх. Можна переглядати вміст різних ділянок пам'яті. Можна виконувати програму по крокам.

Схема асемблування, компоновки і виконання програми

Директиви (псевдооператори)

Нагадаємо, що рядки програми на асемблері поділяються на:

  1. рядки-коментарі;
  2. рядки-оператори (команди мікропроцесора);
  3. рядки-директиви.

Кожна програма займає в оперативній пам'яті певну область і ділиться на три сегменти:

  1. сегменту коду;
  2. сегменту даних;
  3. сегменту стеку.

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

При використанні змінної необхідно визначити місце у програмі, де вона буде знаходитися (у якому сегменті), її ім'я і тип цієї змінної. Можна цій змінній присвоїти початкове значення.

Звичайно для збереження змінних використовується сегмент даних (початкова адреса сегменту даних у регістрі DS). Але бувають такі ситуації, коли змінні доцільно зберігати у сегменті кодів (початкова адреса у сегменті СS).

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

При програмуванні для МП сімейства 180х86 використовують такі моделі:

*      модель пам'яті Tiny;

*      модель пам'яті Smoll;

*      модель пам'яті Medium;

*      модель пам'яті Compact;

*      модель пам'яті Large;

*      модель пам'яті Huge;

*      модель пам'яті Flat;

Наприклад, модель пам'яті Tiny складається із одного сегмента. Усі сегменти починаються із однієї і тієї ж адреси. Регістри CS, DS, SS мають одне значення.

У моделі пам'яті Smoll дані і сегменти стеку об'єднані в одну групу.

Приклад директиви, що визначає модель Tiny:

.model Tiny

Директивою .data розпочинається ділянка програми, у якій записуються змінні, значення яких відомі. Ця директива визначає сегмент даних в ОП.

Директива db визначає однобайтові константи. Формат директиви:

<мітка> db <список констант> ; коментар

Приклад 1:

ARM db -18

; директива розмістить у байті пам'яті у доповняльному коді число -18, призначає байту символічне ім'я ARM

Приклад 2:

B1 db ?

; директива визначає байт. Початкове значення якого невідомо

Директиви, що визначають константи:

Таблиця 1

Директива

Довжина константи (у байтах)

Db

1

Dw

2

Dd

4

Dq

8

Dt

16

Директивою .code розпочинається ділянка програми, у якій записуються оператори програми (символічне позначення команд МП).

Директива end вказує на фізичний кінець вихідного модуля.

Загальний (спрощений) вигляд програми (вихідного модуля) на мові Асемблера

.model Tiny

;директива опису моделі пам'яті - визначення механізму розподілення пам'яті під дані і команди

.data

;директива початку сегмента ініціалізації даних - визначення ділянки пам'яті з даними (сегменту даних)

.code

;початок сегмента кодів

mov ax, @data

;записування початкової сегмента даних у

mov ds, ax

;регістр ds

 

;оператори Асемблера для реалізації алгоритму розв'язування задачі

mov ah, 4ch

;занесення коду функції виходу з програми (4Сh) у регістр ah

int 21h

;повернення у програму, з якої викликалася дана програма

end

;директива кінця тексту програми (модуля)

 

Зразок програми на Асемблері

Завдання.
Записати на Асемблері програму обчислення арифметичного виразу:

x=3•(a-b)+c

Для розрахунків прийняти:

a=-10

b=12

c=40

1. Розподілення пам'яті:

Таблиця 2

Ім'я комірки

Вміст

 

 

a

-10

b

12

c

40

x

?

2. Текст програми на Асемблері: x=3•(a-b)+c

;Програма обробки двобайтових чисел

.model tiny

.data

;вхідні дані для роботи програми

a

dw

-10

b

dw

12

c

dw

40

;комірка для запам'ятовування результату

x

dw

?

.code

mov ax, @data

mov ds, ax

mov ax, a

sub ax, b

mov bx, 3

imul bx

add ax, c

mov x, ax

mov ah, 4ch

int 21h

end

 

Copyright © Eugene, 2007
e-mail: webmaster@ITDom.info
Rambler's Top100 Рейтинг@Mail.ru