Абсолютная адресация При абсолютной
адресации адресное поле команды непосредственно содержит номер целевой
ячейки памяти. Таким способом производятся обращения к объектам с постоянными
адресами: статическим и внешним переменным, точкам входа подпрограмм. Как
и в случае с обсуждавшейся в предыдущем подразделе литеральной адресацией, процессор,
который использует такую адресацию, либо должен иметь команды переменной длины,
либо его команда должна быть длиннее адреса. Второе условие выполняется не только
у процессоров гарвардской архитектуры, но и у многих старых компьютеров с небольшим
адресным пространством. Абсолютная адресация
в системе команд 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)] | ! | сохраняем результат. |
В модулях, содержащих много обращений к переменным, рекомендуется выделить
для этой цели регистр и использовать смещения относительно него — как, кстати,
и сделано в приведенном примере. Но это уже совсем не абсолютная адресация. |