Assembler, Детальна інформація

Assembler
Тип документу: Реферат
Сторінок: 15
Предмет: Комп`ютерні науки
Автор:
Розмір: 66.8
Скачувань: 2495
Змінні, які явна використовуються в програмі виходячи з її логіки. Такі змінні як правило мають імена і використовуються вони для збереження даних, які мають наперед визначений зміст. Наприклад, змінна що використовується для збереження коду натиснутої клавіші.

Часто в програмі необхідно мати місце для збереження тимчасових даних.

Сегмент даних.

Використовується для збереження змінних, що визначає програміст. Як правило це робиться при допомозі псевдооператорів виділення пам’яті. Для визначення адреси початку сегменту використовується регістр DS. Для визначення другої компоненти адреси (відповідного зміщення всередині сегменту) використовується кілька способів адресації. Зауважимо, що способів визначення адреси змінної набагато більше ніж способів визначення адреси команди. В мові асемблер є засоби для явного розділ. збереження змінних. Ці змінні можуть мати або не мати початкових значень, а також можуть бути змінними константами. Розділяти ці типи змінних не обов’язково. Усіх їх можна зберігати в сегменті даних.

Ініціалізовані змінні.

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

Неініціалізовані змінні.

Неініціалізовані змінні записуються в сегмент який починається директивою data.

Сегмент стеку використовується для збереження тимчасових даних для яких недоцільно виділяти змінні. Адреса початку цього сегменту розміщується в регістрі SS, а зміщення відносно початку в регістрі SP. Для визначення сегменту стеку використовується директива stack. Цей сегмент відрізняється від сегменту даних і коду. В сегменті даних і коду можна явно адресувати б-я комірку пам’яті. Тут значення регістру при виконанні команд. В кожний момент часу пара цих регістрів SS і SP вказує на так звану вершину стеку. Сюди можна записати або прочитати значення. Стек організований за правилом: перший записаний, останній прочитаний. Тому у програмі команди запису і зчитування зі стеку потрібно використовувати попарно. Стек переважно використовується для тимчасового зберігання адреси повернення з програми або перервань. Ще одне ми.

За вання стеку – при його допомозі можна передавати аргументи підпрограмам і організовувати локальні змінні.

Лекція за 1.10.

Моделі пам’яті

Tiny (файл *.com). При цьому регістри CS, DS, SS містять однакові значення. Це найбільш компактна модель пам’яті. Розмір пам’яті не може перевищувати 63Кб. Адресація здійснюється за допомогою зміщення і міток. Оскільки програма на асемблері не є великими, то це не є значним обмеженням. Ця модель широко використовується, особливо в резидентних програмах.

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

Compact. Використовується 1 сегмент коду і можливе ми.

За вання кількох сегментів даних. тому виклики підпрограм і переходи в програмі є короткими, а доступи до даних – далекими. Сегмент даних і стек об’єднані в одну групу.

Medium. В значній мірі протилежна до попередніх. Є кілька сегментів коду і один сегмент даних. Тому доступ до підпрограм і переходи в програмі є далекими (потрібна адреса сегменту та зміщення). А доступ до даних здійснюється за допомогою короткої адресації (вказується тільки зміщення).

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

Huge, Flat. Це досить поширені моделі. Така ж організація пам’яті, як і в large. Вона використовується для поєднання асемблера змовами високого рівня. В них можна задати таку модель пам’яті, з’являється можливість роботи з даними що займають більше 64 Кб. В програмі на асемблері таку модель використовувати недоцільно. Модель Flat відповідає моделі Small, різниця в тому, що використовуються 32 розрядні регістри. Таку модель можна організувати використовуючи процесор вище і80386. Переважно її використовують для роботи в захащеному режимі. В цьому випадку доступ до всієї області пам’яті здійснюються за допомогою одного сегменту.

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

Model [ < модифікатор >] < тип >.

В цій директиві може бути вказано ще ряд параметрів. Єдиним необхідним параметром є параметр <тип>. Тип можна додатково модифікувати. Для цього необхідно вказати один із 4 модифікаторів:аnearstack; farstack; use16; use32. При першому стек і дані розташинані в межах одного сегменту; farstack вказує, що сегмент даних буде розташинаний за межами стеку. Nearstack використовується по замовчуванню у всіх стандартних моделях пам’яті. Він дозволяє організувати інтерфейс з мовами високого рівня. Тут глобальні дані розміщені в сегменті даних, а локальні – в сегменті стеку. Два останні модифікатори використовуються тільки для МП 80386 і старше, вони вказують які сегменти використовуються в програмі, 16-розрядні (64 Кб сегмент) і 32-розрядні (4Гб сегмент). Доцільно використовувати ці модифікатори при розробці програм при використанні 32-розрядних компіляторів.

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

Псевдооператори керують роботою асемблера, а не МП. Вони дозволяють визначати сегменти і процедури (надавати імена програмам і елементам даних, резервувати області пом’яті та виконувати багато інших задач). Псевдооператори мають таку загальну форму запиту:а

[<ідентифікатор>] псевдооператор [<операнд>][; коментар].

Обов’язковим є тільки поле псевдооператори. Для одних псевдооператорів ідентифікатор обов’язковий, для інших заборонений, для третіх необов’язковий, це ж відноситься і до операнди, коментарі завжди необов’язкові. Псевдооператор може починатися в будь-якому місці рядка, він повинен бути віддаленим від попереднього поля хоча б одним пропуском. Ми розглянемо найбільш розповсюджені псевдооператори, їх можна поділити на дві групи: псевдооператори даних і псевдооператори керування лістингом. Псевдооператори даних можна розділити на 5 груп:а

Псевдооператори визначення ідентифікаторів. Вони дозволяють виразу присвоїти символічне ім’я, тобто ідентифікатор. В якості виразу може бути константа, адреса, інше символічне ім’я. Після такої директиви цей ідентифікатор можна використовувати в будь-якому місці де необхідно вказати вираз. Два оператори:аEQU і =, ці псевдооператори подібні, але між ними є істотна різниця:а

Позначені знаком “=” ідентифікатори можна перевизначати, а визначені псевдооператором EQU неможна. Псевдооператор EQU можна використовувати як з числовими такі з текстовими виразами, а псевдооператор “=” тільки з числовими. Приклади:

К1аEQU 1024 – присвоєння імені константі; T_1аEQU DS:[BP][SI]. Комбінації адрес DS:[BP][SI] присвоюється символічне ім’я, всюди в програмі замість комбінації цих адрес можна використовувати T_1. В_Т EQU B_T1, визначення синоніму, тобто ім’я В_Т буде мати те ж значення як і зміна В_Т1. REG1аEQU CX – присвоєння імені регістру. При використанні псевдооператора “=” в якості виразу можуть виступати математичні перетворення. В директиві EQU також можуть бути прості математичні перетворення, вони будуть виконані асемблером під час трансляції. Наприклад: CON1аEQU CON2*2 CONS1=24 CONS1=29 CONS1=CONS1+1.

Псевдооператори визначення даних. В асемблері можна використовувати комірки пам’яті для збереження поіменованих даних, тобто змінних. Найбільш використовуються такі псевдооператори для резервування пам’яті:1) DB – Define Byte; 2) DW – Define Word; 3) DD – Define Double Word; 4) DQ; 5) DF; 6) DT. В основному вони розрізняються по об’єму пам’яті, який резервується. Псевдооператори визначення даних мають такий формат запису: ім’я псевдооператор вираз [,……]. В якості виразу найчастіше може бути константа. Псевдооператор DB резервує пам’ять об’ємом 1 байт. DW – об’ємом одне слово. DD – подвійне слово. DQ – 2пподвійні слова. DF – 6 байт. DT – 10 байт. Наприклад змінна xyz DW 2S – резервує для змінної ( ). Треба пам’ятати про макс. Vпмін. значення даних, які можуть бути розміщені у відведеній пам’яті в кожному з цих випадків, так наприклад: макс. значення байта без знака не може перевищувати 255, макс. значення байта зі знаком 127, а мін. – 128. Псевдооператори можна використовувати для створення в пам’яті таблиць, наприклад: А_ТАВ DB 3, 2, 4, 6, 8, 0, 0, 0

The online video editor trusted by teams to make professional video in minutes