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

Самый простой вид адресации, так как в этом случае адрес данных в памяти (в основном требуется указывать смещение) находится непосредственно в команде и для его формирования не требуется никаких дополнительных источников или регистров.

1.1. Абсолютная прямая адресация

Эффективный адрес (смещение) операнда, расположенного в памяти, находится непосредственно в машинной команде.

Запись в регистр AX слова (размер данных определяется первым операндом команды – операндом приемником) со смещением от начала дополнительного сегмента равным 0002H:

 

MOV AX,ES:0002H

 

Запись в регистр DH байта (размер данных определяется первым операндом команды – операндом приемником) со смещением от начала сегмента данных равным 00ABH:

 

MOV DH,DS:00ABH

 

Но такая адресация применяется редко – обычно используемым ячейкам в программе присваиваются символические имена. В процессе трансляции ассемблер вычисляет и подставляет значения эффективных адресов этих имен в формируемую им машинную команду.

Запись в регистр DL байта с физическим адресом (транслятор по умолчанию подставляет значение регистра DS при определении физического адреса данных в памяти):

 

per1 DB 12

MOV DL,per1

 

1.2. Относительная прямая адресация

Используется для команд передачи управления (условных и безусловных переходов, организации цикла), для указания относительного адреса перехода. В машинной команде содержится смещение, которое прибавляется к значению указателя команд IP. То есть указывается не сам адрес перехода, а на сколько байтов вперед или назад надо перейти. У такого режима адресации два преимущества. Во-первых, машинная команда становится короче, так она содержит не полный адрес, а только смещение. Во-вторых, такой код не зависит от адреса, по которому он размещается в памяти.

Например, организация цикла:

 

metka:

...

LOOP metka

 

Организация условного перехода:

 

JC m5 ;переход на метку m1, если флаг cf = 1

MOV AL,2

...

m5: MOV AL,5