Assume cs:code, ds:data, es:nothing

Здесь code и data – имена сегментов кодов и данных, соответственно, а сегментный регистр es не адресуется по уполчанию.

Режимы адресации

Способ определения операнда называется режимом адресации. Различают следующие режимы адресации.

Регистровая прямая – операнд находится в регистре. Например: mov АХ,SI. Данная запись означает – переслать содержимое регистра SI в регистр АХ.

Непосредственная – непосредственный операнд (константа) присутствует в команде. Например: mov AX, 093Ah – означает: занести константу 093Ah в регистр АХ.

Прямая – исполнительный адрес операнда присутствует в команде. Например, mov AX,WW – означает: переслать в АХ слово памяти с именем WW, а выражение: mov BX,WW+2 переслать в ВХ слово памяти отстоящее от переменной с именем WW на 2 байта.

Регистровая косвенная - регистр содержит адрес операнда. Выражение mov[BX],CL – означает переслать содержимое регистра CL по адресу, находящемуся в регистре ВХ.

Регистровая относительная – адрес операнда вычисляется как сумма содержимого регистра и смещения: mov АХ,WW[SI] – переслать в АХ слово из памяти, адрес которого вычисляется как сумма содержимого регистра SI и смещения WW.

Индексно-базовая – адрес операнда вычисляется как сумма содержимых базового и индексного регистров и смещения: mov [BX+ SI+ 2],CL – переслать содержимое регистра CL по адресу, вы­числяемому как сумма содержимого регистров ВХ, SI и константы 2.

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

Команды данной группы приведены в таблице 2.2. Код определяет выполняемое командой действие, операнды показывают адреса ячеек, хранящих исходные данные, необходимые для выполнения команды и адрес ячейки результата. Процессор i8086 и более поздние версии относятся к двухадресным машинам. Это значит, что его команда может содержать не более двух операндов. Если для выполнения команды необходимо иметь два источника данных, например, сложение, то сохранение результата выполнения команды производиться по адресу одного из источников данных. Чтобы показать, какой из операндов будет хранить результат, его обозначают при описании команды как dst (destination – назначение), операнд, который используется только как адрес исходных данных, обозначается как src (source – источник). В двухоперандных командах операнд dst указывает, перед выполнением команды, адрес исходного данного, а после выполнения – адрес результата.

Таблица 2.2. Основные операторы Ассемблера

Мнемокод Флаги Действие
Код Операнды O S Z A P C
mov dst, src. - - - - - - пересылка
хchg dst, src - - - - - - обмен
add dst, src х х х х х х сложение
adc dst, src х х х х х х сложение с переносом
inc dst х х х х х - увеличить на единицу
sub dst, src х х х х х х вычитание
sbb dst, src х х х х х х вычитание с заемом
dec dst х х х х х - уменьшение на единицу
neg dst х х х х х х изменение знака
rcl dst,счетчик х - - - - х циклический сдвиг влево
rcr dst,счетчик х - - - - х циклический сдвиг вправо
rol dst,счетчик х - - - - х циклический сдвиг влево
ror dst,счетчик х - - - - х циклический сдвиг вправо
sal dst,счетчик х х х u х х арифметический сдвиг влево
sar dst,счетчик х х х u х х арифметический сдвиг вправо
shl dst,счетчик х х х u х х логический сдвиг влево
shp dst,счетчик х х х u х х логический сдвиг вправо
push src - - - - - - сохранение слова в стеке
pop dst - - - - - - восстановление слова из стека
xlat таблица - - - - - - трансляция байтов из таблицы
lea dst, src - - - - - - загрузка исполнительного адреса
lds dst, src - - - - - - загрузка указателя с DS
les dst, src - - - - - - загрузка указателя с ES
lahf   - - - - - - загрузка флагов в АН
sahf   - r r r r r установка флагов из АН
pushf   х - - - - х сохранение флагов в стеке
popf   r r r r r r восстановление флагов из стека

Примечание:

- флажок не модифицируется

х устанавливается или сбрасывается в соответствии с результатом

u не определен

r восстанавливается прежнее запомненное значение

Запись программ на языке ассемблера

В листинге 2.8 приведена типичная структура простой программы на ассемблере.

Листинг 2.8. Пример программы

Data segment ;директива начала сегмента данных

D1 dw 34h ;переменная d1 имеет размер

;2 байта и содержит значение 52

D2 db 10100110b ;переменная d2 имеет размер

;1 байт и содержит значение 166

D3 dd 3 dup (?) ;массив d3 содержит 3 элемента

;по 4 байта, содержащих случайные

;значения (возможно нулевые)

Data ends ;директива конца сегмента данных

Наши рекомендации