Абсолютная адресация

При абсолютной адресации адресное поле команды непосредственно содержит номер целевой ячейки памяти. Таким способом производятся обращения к объектам с постоянными адресами, таким как статические и внешние переменные, а также точкам входа подпрограмм. Эта техника является основой для работы многих языков программирования, обеспечивая возможность обращения к данным, находящимся в заранее известных адресах памяти.

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

Абсолютная адресация в системе команд SPARC

У процессоров SPARC реализация абсолютной адресации похожа на реализацию адресации литеральной: под адресацию занимается регистр, и командой sethi %hi (addr), reg в него загружается старшая часть адреса, а затем происходит собственно адресация. Для формирования 64-разрядного адреса необходимо задействовать два регистра и выполнять ту же программу, что и в примере 2.1. Это позволяет эффективно использовать возможности процессора и уменьшать количество инструкций для загрузки адресов в память.

Обращение к переменной в памяти происходит так, как показано в примере 2.1.

Пример 2.2. Обращение к переменной на процессоре SPARC

sethi %hi(var), %g1!помещаем старшие биты адреса в %g1
ld [%g1 + %lo(var)], %l1!загружаем значение в %l1
inc %l1!производим операцию
st %l1, [%g1 + %lo(var)]!сохраняем результат.

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

Эффективность абсолютной адресации заключается в её простоте и быстродействии, но она ограничена фиксированными адресами. В современных системах, где используется динамическое распределение памяти, абсолютная адресация может быть менее предпочтительной. Вместо этого могут применяться другие методы адресации, такие как относительная, что позволяет динамически управлять доступом к памяти, увеличивая гибкость программ.