Статус
нашего
сайта:
ICQ Secrets Center is Online  ICQ Information Center


ICQ SHOP
     5-значные
     6-значные
     7-значные
     8-значные
     9-значные
     Rippers List
ОПЛАТА
СТАТЬИ
СЕКРЕТЫ
HELP CENTER
OWNED LIST
РОЗЫСК!New!
ICQ РЕЛИЗЫ
Протоколы ICQ
LOL ;-)
Настройка компьютера
Аватарки
Смайлики
СОФТ
     Mail Checkers
     Bruteforces
     ICQTeam Soft
     8thWonder Soft
     Other Progs
     ICQ Patches
     Miranda ICQ
ФорумАрхив!
ВАШ АККАУНТ
ICQ LiveJournal

Реклама

Наш канал:

irc.icqinfo.ru

Таненбаум Э.- Архитектура компьютера. стр.286


Таненбаум Э.- Архитектура компьютера. стр.286

Прямая адресация

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

Регистровая адресация

Регистровая адресация по сути напоминает прямую, только в данном случае вместо ячейки памяти указывается регистр. Поскольку регистры очень важны (благодаря быстрому доступу и коротким адресам), этот режим адресации является самым распространенным на большинстве компьютеров. Многие компиляторы определяют, к каким переменным доступ будет осуществляться чаще всего (например, индексы циклов) и помещают эти переменные в регистры.

Такой режим называют регистровой адресацией. В архитектурах с перенаправлением для загрузки, например UltraSPARC II, практически все команды используют этот режим адресации. Он не применяется только в том случае, если операнд перемещается из памяти в регистр (команда LOAD) или из регистра в память (команда STORE). Но даже в этих командах один из операндов является регистром — туда отправляется слово из памяти и оттуда перемещается слово в память.

Косвенная регистровая адресация

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

Чтобы понять, почему может быть полезно использовать разные слова при каждом выполнении команды, представим себе цикл, который проходит по 1024-элементному одномерному массиву целых чисел для получения в регистре Ш суммы элементов. Вне этого цикла какой-то другой регистр, например 112, может указывать на первый элемент массива, а еще один регистр, например КЗ, — на первый адрес после массива. Массив содержит 1024 целых числа по 4 байта каждое. Если массив начинается с элемента Д то первый адрес после массива будет А + 4096. Типичная программа на ассемблере, выполняющая это вычисление для двухадресной машины, показана в листинге 5.1.

Листинг 5.1. Программа на ассемблере для вычисления суммы элементов массива

Таненбаум Э.- Архитектура компьютера.

В этой маленькой программе мы использовали несколько режимов адресации. В первых трех командах выполняется регистровая адресация первого операнда (целевого) и непосредственная адресация второго (константа, обозначаемая символом #). Вторая команда помещает в R2 не содержимое элемента А, а элемент А. Именно это и сообщает ассемблеру знак #. Сходным образом третья команда помещает в R3 первое слово после массива.


⇐ Предыдущая страница| |Следующая страница ⇒

.