Инструкции пересылки данных и двоичной арифметики
Модели памяти
Идентификаторы, создаваемые директивой MODEL
Упрощенные директивы определения сегмента
Формат директивы | Назначение |
.CODE [имя] | Начало или продолжение сегмента кода |
.DATA | Начало или продолжение сегмента инициализированных данных. Также используется для определения данных типа near |
.CONST | Начало или продолжение сегмента постоянных данных (констант) модуля |
.DATA? | Начало или продолжение сегмента неинициализированных данных. Также используется для определения данных типа near |
.STACK [размер] | Начало или продолжение сегмента стека модуля. Параметр [размер] задает размер стека |
.FARDATA [имя] | Начало или продолжение сегмента инициализированных данных типа far |
.FARDATA? [имя] | Начало или продолжение сегмента неинициализированных данных типа far |
Наличие в некоторых директивах параметра [имя] говорит о том, что возможно определение нескольких сегментов этого типа.
При использовании директивы MODEL транслятор делает доступными несколько идентификаторов, к которым можно обращаться во время работы программы, с тем, чтобы получить информацию о тех или иных характеристиках данной модели памяти
Имя идентификатора | Значение переменной |
@code | Физический адрес сегмента кода |
@data | Физический адрес сегмента данных типа near |
@fardata | Физический адрес сегмента данных типа far |
@fardata? | Физический адрес сегмента неинициализированных данных типа far |
@stack | Физический адрес сегмента стека |
Операнды директивы MODEL используют для задания модели памяти, которая определяет набор сегментов программы, размеры сегментов данных и кода, способ связывания сегментов и сегментных регистров.
Модель | Тип кода | Тип данных | Назначение модели |
TINY | near | near | Код и данные объединены в одну группу с именем DGROUP. Используется для создания программ формата .com. |
SMALL | near | near | Код занимает один сегмент, данные объединены в одну группу с именем DGROUP. Эту модель обычно используют для большинства программ на ассемблере |
MEDIUM | far | near | Код занимает несколько сегментов, по одному на каждый объединяемый программный модуль. Все ссылки на передачу управления — типа far. Данные объединены в одной группе; все ссылки на них — типа near |
COMPACT | near | far | Код в одном сегменте; ссылка на данные — типа far |
LARGE | far | far | Код в нескольких сегментах, по одному на каждый объединяемый программный модуль |
Команды данной группы приведены в таблице 2.1. Код определяет выполняемое командой действие, операнды показывают адреса ячеек, хранящих исходные данные, необходимые для выполнения команды и адрес ячейки результата.
Процессор i8086 и более поздние версии относятся к двухадресным машинам. Это значит, что его команда может содержать не более двух операндов. Если для выполнения команды необходимо иметь два источника данных, например, сложение, то сохранение результата выполнения команды производиться по адресу одного из источников данных. Чтобы показать, какой из операндов будет хранить результат, его обозначают при описании команды как dst(destination – назначение), операнд, который используется только как адрес исходных данных, обозначается как src(source – источник). В двухоперандных командах операнд dst указывает, перед выполнением команды, адрес исходного данного, а после выполнения – адрес результата.
Мнемокод | Действие | |
Код | Операнды | |
mov | dst, src. | пересылка |
add | dst, src | сложение |
inc | dst | увеличить на единицу |
sub | dst, src | вычитание |
dec | dst | уменьшение на единицу |
neg | dst | изменение знака |
sal | dst,счетчик | арифметический сдвиг влево |
sar | dst,счетчик | арифметический сдвиг вправо ( по мере сдвига вправо освобождающиеся места заполняются значением знакового разряда) |
shl | dst,счетчик | логический сдвиг влево |
shp | dst,счетчик | логический сдвиг вправо |
xlat | таблица | трансляция байтов из таблицы |
lea | dst, src | загрузка исполнительного адреса |
mod | dst, src | получения остатка от деления |