Непосредственная адресация. Косвенная адресация. Виды адресаций по базе.
Непосредственная адресация (Immediate Addressing)
Определение и синтаксис
Задание
Косвенная адресация (Indirect Addressing)
Определение и виды
Особенности косвенной адресации
Сравнение с прямой адресацией
Практические примеры
Практическая часть
Адресация по базе (Base Addressing) 
Понятие базовой адресации
Подробное объяснение
Применение базовой адресации
Отличие от других видов адресации
Практические примеры
Ошибки и подводные камни
Задание
Закрепление материала
Контрольные вопросы
Задание
427.50K
Category: programmingprogramming

Непосредственная адресация. Косвенная адресация. Виды адресаций по базе

1. Непосредственная адресация. Косвенная адресация. Виды адресаций по базе.

Пояркова Анна Вячеславовна

2. Непосредственная адресация (Immediate Addressing)

3. Определение и синтаксис

Непосредственная адресация — это способ
задания операнда в команде ассемблера, при
котором значение операнда явно указано в
самой инструкции. Это означает, что процессор
не обращается к памяти или регистрам для
получения данных — они уже содержатся в
машинном коде команды.

4.

Ключевые особенности:
Операнд — константа, которая может быть:
Числом (десятичным, шестнадцатеричным,
двоичным).
Символом (кодируется в ASCII).
Адресом (редко, зависит от архитектуры).
Синтаксис в большинстве ассемблеров (на
примере x86):
Например:

5.

Разбор примера MOV AX, 42h
Команда: MOV (код операции — перемещение
данных).
Назначение: AX (16-битный регистр общего
назначения).
Источник: 42h — непосредственное значение,
записанное в шестнадцатеричном формате.
Преобразуется в машинный код вида:
Что происходит при выполнении:
Процессор копирует число 42h напрямую в
регистр AX, без чтения из памяти.

6.

Ограничения
1. Нельзя использовать для записи в память:
Корректный вариант — сначала загрузить значение в
регистр:
2. Размер операнда должен соответствовать регистру:

7.

Примеры для разных разрядностей
Регистр
Размер(бит)
Допустимый
диапазон
Пример
корректной
команды
AL
8
0…255(0xFF)
MOV AL,0FEh
AX
16
0…65535(0xFFFF)
MOV AX, 1000
EAX
32
0…232-1
MOV EAX,
12345678h
RAX
64
0…264-1
MOV RAX,
1122334455667788h
Особенности в других архитектурах
ARM:
MIPS:

8.

Практическое применение
Инициализация регистров:
Арифметические операции:
Быстрые вычисления:

9.

Визуализация в отладчике
Пример для x86 в Debug (DOS):
Машинный код: B8 42 00
Результат:
Типичные ошибки
Неправильный формат числа:
Переполнение регистра:

10. Задание

Напишите код, который:
Загружает в регистр DX значение ABCDh.
Прибавляет к нему 10.
Результат сохраняет в BX.

11. Косвенная адресация (Indirect Addressing)

12. Определение и виды

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

13.

Основные принципы:
Операнд — не само значение, а адрес, по
которому оно хранится.
Процессор сначала читает адрес из указанного
места (регистра/памяти), затем по этому адресу
получает данные.
В отличие от прямой
адресации (например, MOV AX, [1000h]), где
адрес жёстко закодирован в команде, косвенная
адресация позволяет динамически вычислять
адрес во время выполнения программы.

14.

Виды косвенной адресации
1. Регистровая косвенная адресация
Адрес данных хранится в регистре.
Синтаксис (x86):
Применение:
Перебор массивов (регистр используется как
указатель).
Работа со строками.
Доступ к динамически выделенной памяти (например,
через malloc в Си).

15.

2. Ячеечная косвенная адресация
Адрес хранится в памяти, а не в регистре (редко
используется в x86, чаще в RISC-архитектурах).
Пример (гипотетический):
Где встречается:
В некоторых старых процессорах (например, PDP-11).
В x86 требует двух команд:

16. Особенности косвенной адресации

Преимущества
Гибкость:
Адрес может вычисляться во время выполнения (например, при работе с
массивами).
Позволяет реализовать указатели (как в языках высокого уровня).
Экономия кода:
Один регистр может использоваться для доступа к разным областям памяти.
Ограничения
Медленнее, чем непосредственная/регистровая
адресация (требуется дополнительное обращение к памяти).
Риск ошибок:
Разыменование нулевого указателя (например, MOV AX, [0] → крах
программы).
Выход за границы памяти (если регистр содержит неверный адрес).

17. Сравнение с прямой адресацией

Критерий
Прямая адресация(MOV
AX, [1000h])
Косвенная адресация
(MOV AX, [BX])
Адрес в команде
Жестко закодирован (1000h)
Указан в регистре(BX)
Гибкость
Низкая (адрес фиксирован)
Высокая (адрес может
меняться)
Быстродействие
Быстрее (одно обращение к
памяти)
Медленнее (два обращения,
если считать загрузку адреса
в регистр)

18. Практические примеры

Пример 1: Перебор массива

19.

Пример 2: Обмен значений через указатели

20. Практическая часть

Ответить на вопросы:
Почему косвенная адресация полезна при работе
с массивами?
Какая ошибка произойдёт, если выполнить MOV
AX, [DX] в x86?
(Ответ: DX нельзя использовать для адресации
в реальном режиме x86 — только BX, SI, DI, BP.)

21.

Напишите код, который:
Загружает в BX адрес переменной data.
Читает слово из памяти по этому адресу в AX.
Увеличивает его на 1 и сохраняет обратно.

22. Адресация по базе (Base Addressing) 

23. Понятие базовой адресации

Базовая адресация — это способ адресации, при
котором эффективный адрес (адрес данных в
памяти) вычисляется как сумма:
Базового регистра (BX, BP в x86).
Смещения (offset) — константного значения,
указанного в команде.
Общий синтаксис (x86):
Пример

24. Подробное объяснение

1. Базовые регистры в x86
В архитектуре x86 для базовой адресации используются:
BX (Base Register) — обычно указывает на данные в
сегменте данных (DS).
BP (Base Pointer) — указывает на данные в сегменте
стека (SS).
2. Смещение (offset)
Может быть положительным или отрицательным.
Задаётся как число (десятичное/шестнадцатеричное)
или символьная метка.
Примеры:

25.

3. Вычисление эффективного адреса
Формула:
Пример:

26. Применение базовой адресации

1. Доступ к элементам структур
2. Работа с локальными переменными в стеке
• BP часто используется для доступа к аргументам и локальным переменным
функций.

27.

3. Доступ к массивам

28. Отличие от других видов адресации

Тип адресации
Пример
Когда используется
Прямая
MOV AX, [1000h]
Фиксированные адреса
Косвенная
MOV AX, [BX]
Динамические указатели
Базовая
MOV AX, [BX+10h]
Доступ к структурам/
массивам со смещением

29. Практические примеры

Пример 1: Обход массива структур
Пример 2: Доступ к аргументам функции

30. Ошибки и подводные камни

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

31. Задание

Напишите код, который:
Загружает в BX адрес массива numbers.
Читает второй элемент массива в регистр AX.
Умножает его на 2 и сохраняет обратно.

32. Закрепление материала

Дана команда MOV [BP+4], AL. Определите тип
адресации и объясните её смысл. Запишите
пример контекста (функция в x86)

33. Контрольные вопросы

1. Чем отличается непосредственная адресация
от косвенной?
2. Как используется регистр BP в базовой
адресации?
3. Какие преимущества даёт комбинированная
адресация?
4. Почему в x86 нельзя
использовать CX или DX для базовой адресации?
5. Как обратиться к 5-му элементу массива,
используя базовую адресацию?
6. Что произойдёт, если выполнить MOV [BP],
AL без настройки BP?

34. Задание

Запиши итоговую таблицу сравнения адресаций, в
которой будет:
Тип адресации
Пример
Когда использовать
English     Русский Rules