Упрощенные директивы определения сегмента

 

Формат директивы Формат директивы Назначение

(режим MASM) (режим IDEAL)

.CODE [имя] CODESEG[имя] Начало или продолжение сегмента кода

.DATA DATASEG Начало или продолжение сегмента инициализированных данных. Также используется для определения данных типа near

.STACK [размер] STACK [размер] Начало или продолжение сегмента стека модуля. Параметр [размер] задает размер стека

______

.CONST CONST Начало или продолжение сегмента постоянных данных (констант) модуля

.DATA? UDATASEG Начало или продолжение сегмента неинициализированных данных. Также используется для определения данных типа near

.FARDATA [имя] FARDATA [имя] Начало или продолжение сегмента инициализированных данных типа far

.FARDATA? [имя] UFARDATA [имя] Начало или продолжение сегмента неинициализированных данных типа far

 

Замеч. Наличие в некоторых директивах параметра [имя] говорит о том, что возможно определение нескольких сегментов этого типа.

 

Совместно с упрощенными директивами сегментации используется директива указания модели памяти MODEL, которая частично управляет размещением сегментов и выполняет функции директивы ASSUME, т.е. связывает сегменты с сегментными регистрами (поэтому при использовании упрощенных директив сегментации директиву ASSUME можно не использовать).

! Замеч. Необходимо явно инициализировать только ds .

 

Упрощенный формат директивы MODEL

MODEL [ <модификатор>] <модель памяти> [ др. параметры ]

 

Обязательным параметром директивы MODEL является модель памяти. Этот параметр определяет модель сегментации памяти для программного модуля.

Модели памяти

Модель - Назначение модели

TINY Код и данные объединены в одну группу с именем DGROUP. Используется для создания программ формата .com.

SMALL Код занимает один сегмент, данные объединены в одну группу с именем DGROUP. Эту модель обычно используют для большинства программ на ассемблере

MEDIUM Код занимает несколько сегментов, по одному на каждый объединяемый программный модуль. Все ссылки на передачу управления — типа far. Данные объединены в одной группе; все ссылки на них — типа near

COMPACT Код в одном сегменте; ссылка на данные — типа far

LARGE Код в нескольких сегментах, по одному на каждый объединяемый программный модуль

 

Параметр модификатор директивы MODEL позволяет уточнить некоторые особенности использования выбранной модели памяти.

Модификаторы модели памяти

Значение модификатора - Назначение

use16 Сегменты выбранной модели используются как 16-битные

use32 Сегменты выбранной модели используются как 32-битные

dos Программа будет работать в MS-DOS

 

Другие параметры (используются при написании программ на разных языках программирования) - пока использовать не будем.

 

Пример. Для большинства программ на ассемблере используют директиву

MODEL SMALL

 

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

 

Идентификаторы, создаваемые директивой MODEL

 

Имя идентификатора Значение переменной

@code Физический адрес сегмента кода

@data Физический адрес сегмента данных типа near

@fardata Физический адрес сегмента данных типа far

@fardata? Физический адрес сегмента неинициализированных данных типа far

@curseg Физический адрес сегмента неинициализированных данных типа far

@stack Физический адрес сегмента стека

 

Таким образом общая структура программы может выглядеть следующим образом:

masm ;режим работы TASM: ideal или masm

model small ;модель памяти

.stack <размер> ;сегмент стека

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

<описание данных>

BEGIN : .code ;сегмент кода

<команды>

end BEGIN ;конец программы с точкой входа BEGIN

 

Пример программы с использованием упрощенных директив сегментации:

 

masm ;режим работы TASM: ideal или masm

model small ;модель памяти

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

message db 'Введите две шестнадцатеричные цифры,$'

.stack ;сегмент стека

db 256 dup ('?') ;сегмент стека

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

main proc ;начало процедуры main

mov ax,@data ;заносим в сегментный регистр ds

mov ds,ax ; физический адрес сегмента данных

; замечание.

;далее текст программы

mov ax,4c00h ;пересылка 4c00h в регистр ax

int 21h ;вызов прерывания с номером 21h

main endp ;конец процедуры main

end main ;конец программы с точкой входа main

 

Простые типы данных

 

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

Машинного эквивалента этим директивам нет; просто транслятор, обрабатывая каждую такую директиву, выделяет необходимое количество байт памяти и при необходимости инициализирует эту область некоторым значением.

Директивы резервирования и инициализации данных простых типов:

 

db — резервирование памяти для данных размером 1 байт.

dw — резервирование памяти для данных размером 2 байта.

dd — резервирование памяти для данных размером 4 байта.

df — резервирование памяти для данных размером 6 байт;

dp — резервирование памяти для данных размером 6 байт.

dq — резервирование памяти для данных размером 8 байт.

dt — резервирование памяти для данных размером 10 байт.

 

!!! Напомним порядок размещения данных в памяти. Он напрямую связан с логикой работы микропроцессора с данными. Микропроцессоры Intel требуют следования данных в памяти по принципу: младший байт по младшему адресу.

9.3 НЕКОТОРЫЕ ОПЕРАТОРЫ, ПРЕДОПРЕДЕЛЁННЫЕ ИМЕНА, ДИРЕКТИВЫ И КОМАНДЫ АССЕМБЛЕРА 80X86(8088)








Дата добавления: 2016-02-20; просмотров: 1213;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.01 сек.