Головна

Спрощені директиви сегментації

  1. Compiler Directives (Директиви компілятора).
  2. Види сегментації ринку
  3. Директиви препроцесора.
  4. ДИРЕКТИВИ РЕЗЕРВУВАННЯ І ІНІЦІАЛІЗАЦІЇ ДАНИХ
  5. ДИРЕКТИВИ СЕГМЕНТАЦІЇ
  6. Діректіви_
  7. Зміна структури рекреаційних потреб і початок сегментації туристського ринку

Для простих програм, що містять по одному сегменту для коду, даних і стека опис спрощено. Для цього в транслятори MASM і TASM введена можливість використання спрощених директив сегментації. Спільно зі спрощеними директивами сегментації використовують директиву вказівки моделі пам'яті MODEL. Ця директива пов'язує сегменти, які, в разі використання спрощених директив сегментації, мають зумовлені імена з сегментними регістрами (хоча явно ініціалізувати DS все одно необхідно).

Обов'язковою параметром директиви MODEL є модель пам'яті.

Таблиця 2. - Моделі пам'яті

 Модель  Тип коду  Тип даних  призначення моделі
 TINY  near  near  Код і дані об'єднані в одну групу з ім'ям DGROUP. Використовується для створення програм формату .сом.
 SMALL  near  near  Код займає один сегмент, дані об'єднані в одну групу з ім'ям DGROUP. Цю модель зазвичай використовують для більшості програм на асемблері.
 MEDIUM  far  near  Код займає кілька сегментів, по одному на кожен об'єднується програмний модуль. Всі номери передачу управління - типу far. Дані об'єднані в одній групі, всі посилання на них - типу near.
 COMPACT  near  far  Код в одному сегменті, посилання на дані - типу far.
 LARGE  far  far  Код в декількох сегментах, по одному на кожен об'єднується програмний модуль.
 FLAT  near  near  Код і дані в одному 32-бітному сегменті (плоска модель ОП).

Таблиця 3. - Спрощені директиви визначення сегмента

 формат директиви  призначення
 .CODE [Ім'я]  Початок або продовження сегмента коду
 .DATA  Початок або продовження сегмента ініціалізованих даних. Використовується також для визначення даних типу near
 .CONST  Початок або продовження сегмента постійних даних (констант) модуля
 .DATA?  Початок або продовження сегмента неініціалізованих даних. Використовується також для визначення даних типу near
 .STACK [Розмір]  Початок або продовження сегмента стека модуля. Параметр [розмір] задає розмір стека
 .FARDATA [Ім'я]  Початок або продовження сегмента ініціалізованих даних типу far
 .FARDAТА? [Ім'я]  Початок або продовження сегмента неініціалізованих даних типу far

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

Операнди директиви MODEL використовуються для завдання моделі пам'яті, яка визначає набір сегментів програми, розміри сегментів даних і коду, спосіб зв'язування сегментів і сегментних регістрів. У наступній таблиці наведено деякі значення параметрів моделі пам'яті директиви MODEL.

Таблиця 4. - Ідентифікатори, створювані директивою MODEL

 ім'я ідентифікатора  значення змінної
 @code  Фізична адреса сегмента коду
 @data  Фізична адреса сегмента даних типу near
 @fardata  Фізична адреса сегмента даних типу far
 @fardata?  Фізична адреса сегмента ініціалізованих даних типу far
 @curseg  Фізична адреса сегмента неініціалізованих даних типу far
 @stack  Фізична адреса сегмента стека

Для порівняння наведемо три лістингу з програмами на асемблері. Функціонально вони однакові і виводять на консоль повідомлення: «Hello World!».

Лістинг 1 містить програму зі стандартними директивами сегментації, а лістинг 2, відповідно, - з спрощеними, лістинг 3 містить програму типу .com.

Лістинг 1. Використання стандартних директив сегментації.

data segment para public 'data'

message db 'Hello World! $ ';сегмент даних

data ends

stk segment stack;сегмент стека

db 256 dup ('?')

stk ends

code segment para public 'code';початок сегмента коду

start:;точка входу в програму

assume cs: code, ds: data, ss: stk

mov ax, data;адреса сегмента даних

mov ds, ax; в регістр ах

mov ah, 9h ; Завантаження номера функції

mov dx, offset message ; Завантаження зміщення рядка

int 21h;висновок повідомлення на екран

mov ax, 4c00h ; Функція завершення

int 21h

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

end start;кінець програми з точкою входу start

Лістинг 2. Використання спрощених директив сегментації.

masm;режим роботи для TASM

.model small;модель пам'яті

.data;сегмент даних

message db 'Hello World $'

.stack 256;сегмент стека 256 байт

.code; сегмент коду

start:

mov ax, @ data

mov ds, ax

mov ah, 9h

mov dx, offset message

int 21h

mov ax, 4c00h

int 21h

end start

Лістинг 3. Створення програми типу .com.

.model small

.code

org 100h ; Зміщення на 100h від початку сегмента

begin:

jmp start ; Перехід на мітку start

message db 'Hello World $'

start:

mov ah, 9h

mov dx, offset message

int 21h

mov ax, 4c00h

int 21h

end begin

ДИРЕКТИВИ СЕГМЕНТАЦІЇ | ДИРЕКТИВИ РЕЗЕРВУВАННЯ І ІНІЦІАЛІЗАЦІЇ ДАНИХ


ОСНОВИ АЛГОРИТМІЗАЦІЇ І ПРОГРАМУВАННЯ | Етапи розвитку ЕОМ | покоління ЕОМ | МАШИННО-ОРІЄНТОВАНІ МОВИ ПРОГРАМУВАННЯ | АРХІТЕКТУРА ЕОМ | МІКРОПРОЦЕСОРИ INTEL | Регістри загального призначення | Регістри стану і управління | Сегментна організація пам'яті | ТИПИ ДАНИХ |

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