Скачиваний:
106
Добавлен:
16.04.2013
Размер:
79 Кб
Скачать

Адресация

Адресацией называется обращение к операнду, указание на который содержится в инструкции. Операнды, в зависимости от места своего хранения и типа, могут указываться разными способами, которым соответствуют разные типы адресации. Это разнообразие можно классифицировать только примерно. В данной главе рассматриваются только основные виды адресации.

В зависимости от места хранения, операнды могут указываться:

  • Константами, - если они хранятся непосредственно в коде инструкции.

  • Именами регистров, - если они хранятся в регистрах.

  • Адресами ячеек памяти, - если они хранятся в памяти. Номер ячейки, в которой хранится операнд, называется его адресом.

    • Если адрес отсчитывается от начала адресного пространства, то он называется абсолютным;

    • а если адрес отсчитывается от некоторой базы (начала сегмента или секции), то он называется относительным.

Строго говоря, поскольку ячейка памяти характеризуется еще и типом памяти, то при обращении к ячейке должен быть указан и тип памяти, но реально тип памяти обычно задается видом инструкции. Например, инструкции МП ix86 IN AL,1000 и MOV AL,1000 задают пересылку в регистр AL значения из ячейки 1000, но в первом случае эта ячейка относится к пространству портов, а во втором случае к пространству основной памяти.

Собственно все многообразие видов адресации связанно именно с обращениями к памяти, поскольку для констант всегда используется только непосредственная адресация, а для имен регистров – только прямая.

Непосредственная адресация

Непосредственная (immediate) адресация может использоваться только для указания исходных данных. При непосредственной адресации операнд указывается константой. Признаком непосредственной адресации, как правило, служит символ # стоящий непосредственно перед константой. В некоторых МП, константа не имеет предшествующего символа #.

Например, инструкция процессора MC68000

ADD #54,D2

увеличивает значение регистра D2 на 54, в то время как инструкция

ADD 54,D2

увеличивает значение регистра D2 на величину, содержащуюся в ячейке 54. А вот в процессорах ix86 инструкция

ADD AL,54

увеличивает значение регистра AL на 54, а чтобы увеличить AL на величину, содержащуюся в ячейке 54, нужна инструкция

ADD AL,[54]

Прямая адресация

Адресация называется прямой, если в инструкции прямо указывается имя регистра, где находится операнд, либо адрес (метка) памяти. Во многих МП прямая адресация, указывающая на регистр, называется прямой регистровой адресацией, либо просто регистровой адресацией. С другой стороны, прямая адресация, указывающая на адрес памяти, может иногда называться абсолютной адресацией. Это делается тогда, когда, во-первых, адрес задается абсолютным физическим значением памяти (а не относительным по отношению к программе), а во вторых, если в данном МП есть еще и относительная адресация. Например, в инструкции MC68000:

MOVE.W 1000,D7

слово данных из абсолютного адреса памяти 1000 (абсолютная адресация) пересылаются в регистр D7 (прямая регистровая адресация).

Часто, в МП, прямая адресация данных фигурирует в виде двух способов адресации: короткая адресация и длинная адресация. Это разделение обусловлено тем, что для хранения короткого адреса в теле инструкции, используется меньшее количество байтов, чем для хранения длинного адреса. Например, в МП MC68000 фирмы Motorola, инструкция CLR.W 3300 имеет короткую абсолютную адресацию (для хранения адреса достаточно одного слова), а инструкция CLR.W 443300 имеет длинную абсолютную адресацию (для хранения адреса нужно два слова). Заметим, что у той же фирмы, в 8-разрядном микроконтроллере МС68НС705С8, прямая 8-разрядная адресация называется прямой, а прямая 16-разрядная адресация называется расширенной.