Similar presentations:
Непосредственная адресация. Косвенная адресация. Виды адресаций по базе
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. Задание
Запиши итоговую таблицу сравнения адресаций, вкоторой будет:
Тип адресации
Пример
Когда использовать
programming