Способи адресації переходів
Спо́соби адреса́ції перехо́дів — комплекс визначених для даної архітектури системи команд способів обчислення ефективної адреси команди, на яку передається керування в результаті виконання команди переходу.
Адреса, на яку передається управління, повинна бути зазначеною в команді переходу або обчислена на підставі інформації, що міститься в ній. Таким чином, як і для звичайних обчислювальних команд, знову постає необхідність розгляду методів адресації.
В сучасних архітектурах можна виділити три загальноприйнятих методи адресації переходів:
- регістрова адресація (з різними модифікаціями) — ефективна адреса переходу міститься в регістрі, визначеному в команді
- адресація відносно лічильника команд — зсув знаходиться в полі команди й складається з поточним значенням лічильника команд для отримання ефективної адреси.
- абсолютна адресація — ефективна адреса знаходиться безпосередньо в полі команди
Адресація відносно лічильника команд із зазначенням зсуву в полі команди в певному розумінні є ефективнішою абсолютної адресації з повною заміною значення лічильника адресою, зазначеною в команді. По-перше тому, що в останньому випадку доводиться використовувати дуже великі константи для того, щоби дістатись віддалених ділянок адресного простору, а по-друге тому, що передача керування рідко коли передається занадто далеко. Тому, як правило, команди умовного переходу в сучасних процесорах використовують саме цей метод адресації.
Однак не завжди можливо обчислити зсув команди, на яку повинне бути передане керування, відносно даної команди передачі управління на етапі трансляції асемблерного тексту в машинний код. В таких випадках адреса переходу, формована вже на етапі виконання, як говорять, динамічно, може бути завантажена з регістра з використанням регістрового методу адресації.
Необхідність в динамічному визначенні адреси переходу часто виникає в мовах високого рівня у зв'язку із застосуванням віртуальних функцій (адреси точок входу яких можуть бути різними залежно від типів операндів), вказівників на функцію як аргументів іншої функції, а також при використанні динамічно-підключуваних бібліотек.