82
ёмкость памяти, отводимой под один сегмент, определяется максимальным
значением 16-разрядного смещения и составляет 64 Кбайт.
Наличие разнообразных способов адресаций упрощает организацию
сложных структур данных и повышает гибкость их применения.
Регистровая адресация. Регистровые операнды указываются именами
регистров, определёнными в байте кода операции или в постбайте, в котором
выделены 3-битовые поля reg и r/m (при mod=11).Команды, содержащие
только регистровые операнды, являются наиболее короткими и выполняются
за наименьшее время, так как не требуют вычисления ЕА и выполняются
машинного цикла для обращения к памяти.
Например, команда DEC DI уменьшает содержимое регистра DI.
Непосредственная адресация. Непосредственные операнды – это
постоянные данные, определяемые как часть машинной команды (поле date).
Данные могут быть однобайтными или двухбайтными. Непосредственные
операнды могут быть выбраны быстро, так как их можно получить прямо из
очереди команд без обращения к памяти. Они могут быть заданы только как
операнды-источники. Если приёмником операнда служит аккумулятор,
машинная команда более компактна. Например, команда CMP AL,02
(машинный код 3С02 сравнивает содержимое регистра AL с
шестнадцатеричным числом 02 и устанавливает определённые флаги в
соответствии с результатом сравнения. Эта команда занимает только два
байта в памяти и может быть выполнена за четыре такта.
Прямая адресация. Эффективный адрес ЕА берётся непосредственно из
16-битового поля смещения машинной команды (поле disp).Этот прямой
адрес определяет байт или слово памяти, расположенное внутри сегмента. По
умолчанию прямая адресация приводит в сегмент данных, однако для его
модификации возможно применение префиксных команд, в этом случае
данные можно помещать в любой из четырёх сегментов. При использовании
прямой адресации в поле mod содержится число 00, а в поле r/m – число 110
(табл.2.5).
Например, пусть регистр сегмента данных содержит 04В5H, а байт
1400Н текущего сегмента данных – символическое имя ALFA. Машинная
команда С606001402 (MOV ALFA, 02) предписывает запомнить по
перемещаемому адресу 1400 сегмента данных шестнадцатеричное число 02.
В этой пятибайтной команде С6 – это код команды, 06 – постбайт,
0014 – смещение (disp 16) 1400Н, интерпретируемое как эффективный адрес
ЕА, 02 – шестнадцатеричный операнд 02. Действительный физический
20-битовый адрес здесь соответствует 05F50Н (4В50Н + 1400Н).
Кроме обычной прямой адресации используют два специальных вида
адресации: относительную и абсолютную (или длинную) прямую адресацию.
При относительной адресации поле смещения представляется 8-
битовым числом со знаком. Эффективный адрес ЕА при этом определяется в