Описание процессора i8086 для программиста


Операнды в памяти - часть 2


С любым из регистров или их комбинаций может использоваться 8- или 16-разрядное отклонение; отклонение может также отсутствовать. Исключением является случай использования регистра BP без регистра SI или DI: в такой ситуации всегда должно применяться 8- или 16-разрядное отклонение. Кроме того, эффективный адрес может быть задан 16-разрядным отклонением без использования каких-либо регистров.

На языке ассемблера регистр, участвующий в формировании эффективного адреса, заключается в квадратные скобки. Если применяются два регистра, то либо каждый из них заключается в свои собственные скобки, либо они находятся внутри одних скобок и соединяются там знаком “+”. Например, запись [BX][SI]

эквивалентна записи [BX+SI] и означает, что эффективный адрес является суммой содержимого регистров BX и SI.

Если эффективный адрес состоит из одного отклонения и это отклонение задаётся в числовом виде, а не как метка, перед ним обязательно должно стоять указание WORD PTR или BYTE PTR

в зависимости от того, имеет ли этот операнд размер слово или байт. Это требование связано с тем, что числовая величина будет воспринята транслятором языка ассемблера не как отклонение, а как непосредственный операнд (см. следующий подраздел). Таким образом, для занесения содержимого регистра BH в ячейку памяти со смещением 100h в сегменте данных необходимо использовать следующую инструкцию:

MOV   BYTE PTR 100h, BH

Если адресуемая ячейка памяти находится не в сегменте данных, указание BYTE PTR

или WORD PTR

не требуется, поскольку перед отклонением будет указан префикс замены сегмента, например:

MOV   ES:100h, BH

В инструкции только один из операндов может располагаться в памяти. Вторым операндом обязательно должен быть либо регистровый, либо непосредственный операнд.

Способ формирования эффективного адреса определяется байтом ModRegR/M кода команды. Формат этого байта и назначение его полей будет описано ниже, в подразделе 2.4.2 “Формат кода команды”. Здесь отметим, что двухразрядное поле MOD определяет наличие и размер отклонения, а трёхразрядное поле R/M – используемую комбинацию регистров.Поле Reg в формировании эффективного адреса не участвует.




- Начало -  - Назад -  - Вперед -