Абсолютная адресация
При абсолютной адресации
адресное поле команды непосредственно содержит номер целевой ячейки памяти.
Таким способом производятся обращения к объектам с постоянными адресами:
статическим и внешним переменным, точкам входа подпрограмм.
Как и в случае с обсуждавшейся в предыдущем подразделе литеральной адресацией,
процессор, который использует такую адресацию, либо должен иметь команды
переменной длины, либо его команда должна быть длиннее адреса. Второе
условие выполняется не только у процессоров гарвардской архитектуры, но
и у многих старых компьютеров с небольшим адресным пространством.
Абсолютная адресация в системе команд
SPARC
У процессоров SPARC реализация абсолютной адресации похожа на реализацию
адресации литеральной: под адресацию занимается регистр, командой sethi
%hi (addr) , reg в него загружается старшая часть адреса, а затем происходит
собственно адресация. Для формирования 64-разрядного адреса необходимо
занимать два регистра и выполнять ту же программу, что и в примере 2.1.
Обращение к переменной в памяти происходит так, как показано в примере
2.2.
Пример 2.2. Обращение к переменной на процессоре
SPARC
sethi %hi(var), %g1 |
! |
помещаем старшие биты адреса в %g1 |
Id [%gl+%lo(var)], %11 |
! |
загружаем значение в %11 |
inc %11 |
! |
производим операцию |
st %11, [%gl+%lo(var)] |
! |
сохраняем результат. |
В модулях, содержащих много обращений к переменным, рекомендуется выделить
для этой цели регистр и использовать смещения относительно него — как,
кстати, и сделано в приведенном примере. Но это уже совсем не абсолютная
адресация. |