Прямая адресация
Самый простой вид адресации, так как в этом случае адрес данных в памяти (в основном требуется указывать смещение) находится непосредственно в команде и для его формирования не требуется никаких дополнительных источников или регистров.
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