Упрощенные директивы определения сегмента
Формат директивы Формат директивы Назначение
(режим 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;