9. Режимы адресации. Ограничения на использование режимов адресации.

Режим адресации – это форма записи операнда в команде.

Режимы адресации:

  • Непосредственный (5, 0Аh).
  • Регистровый (AX, BX).
  • Память :
    • Прямой (mas (- имя переменной))
    • Косвенный ([BX] (- взять значение хранящееся по адресу записанному в регистр BX))

Ограничения

  • Оба операнда должны иметь одинаковую длину.
  • Оба операнда не могут одновременно быть памятью.
  • Получатель не может быть регистром CS, IP, EIP.
  • Нельзя в сегментный регистр пересылать непосредственное значение.
  • Приемником не может быть непосредственный режим адресации.

Примеры использования режимов адресации:

Непосредственный.

MOV AX, 5
ADD BL, 0Ah

Регистровый.

MOV DX, AX
SUB CX, AX

Прямой.

MAS DB ‘HELLO’
MOV AL, MAS	;AL=’H’

Эффективный адрес = база + смещение + индекс.
Физический адрес = сегмент*16 + Эффективный адрес.

Косвенный режим адресации также делится еще на 5 видов:

  • Базовая адресация
    В 32-х разрядном ассемблере можно использовать все регистры общего назначения кроме ESP, EBP.
    В 16-х разрядном ассемблере можно использовать только BX, BP.

    Пример: ARR DB 1, 2, 3
    LEA BX, ARR
    MOV AL, [BX]		;AL=1
    
  • Базовый адрес со смещением
    Пример: ARR DB 1, 2, 3
    LEA BX, ARR
    MOV AL, [BX+2]		;AL=3
  • Индексная адресация со смещением
    В 16-х разрядном ассемблере можно использовать только SI, DI для формирования эффективного адреса.

    Пример: ARR DB 1, 2, 3
          MOV SI, 0
    MOV AL, ARR[SI]		;AL=1
    
  • Базовая индексная адресация.
    Эффективный адрес формируется как сумма содержимого двух регистров: базового и индексного.

    Пример: ARR DB 1, 2, 3
    LEA BX, ARR
    MOV SI, 0
    MOV AL, [BX][SI]		;AL=1
    
  • Базовая индексная адресация со смещением.
    Пример: MOV AL, ARR[BX][SI]
    
17.07.2015