Инструкции пересылки данных и двоичной арифметики

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

Идентификаторы, создаваемые директивой 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 получения остатка от деления