Статус
нашего
сайта:
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

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


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

Интересно отметить, что само тело цикла не содержит каких-либо адресов памяти. В четвертой команде используются регистровая и косвенная адресация. В пятой команде применяются регистровая и непосредственная адресация, в шестой — оба раза регистровая. Команда BLT могла бы использовать адрес памяти, однако более привлекательным является определение адреса с помощью 8-разрядного смещения, связанного с самой командой BLT. Таким образом, вообще без обращения по адресам памяти, мы получили короткий и быстрый цикл. Кстати, эта программа предназначена для Pentium 4, только мы переименовали команды и регистры и для простоты изменили запись.

Теоретически есть еще один способ выполнения этого фрагмента без косвенной регистровой адресации. Цикл мог бы содержать команду для прибавления А к регистру R1, например:

ADD Rl, А

Тогда при каждом шаге команда должна увеличиваться на 4. Таким образом, после одного шага команда будет выглядеть следующим образом:

ADD Rl, А + 4

И далее аналогично до завершения цикла.

Программа, которая сама изменяет себя подобным образом, называется самомодифицирующейся программой. Идея, предложенная еще Джоном фон Нейманом, применялась в старых компьютерах, которые не поддерживали режим косвенной регистровой адресации. В настоящее время самомодифицирующиеся программы считаются неудобными и трудными для понимания. Кроме того, их нельзя выполнять совместно несколькими процессорами. Они не могут правильно выполняться даже на машинах с разделенной кэш-памятью первого уровня, если в кэш-памяти команд нет специальной схемы для обратной записи (поскольку разработчики предполагали, что программы сами себя изменять не должны).

Индексная адресация

Часто нужно уметь обращаться к словам памяти по известному смещению. Подобные примеры мы видели в машине IJVM, где локальные переменные определяются по смещению от регистра LV. Обращение к памяти по регистру и константе смещения называется индексной адресацией.

В машине IJVM при доступе к локальной переменной используется указатель ячейки памяти (LV) в регистре плюс небольшое смещение в самой команде, как показано на рис. 4.14, а. Есть и другой способ: указатель ячейки памяти в команде и небольшое смещение в регистре. Чтобы показать, как работает этот механизм, рассмотрим следующий пример. Пусть у нас есть два одномерных массива А и В по 1024 слова в каждом. Нам нужно вычислить Д И В{ для всех пар, а затем соединить все эти 1024 логических произведения операцией ИЛИ, чтобы узнать, есть ли в этом наборе хотя бы одна пара, не равная нулю. Один из вариантов — поместить адрес массива А в один регистр, а адрес массива В — в другой регистр, а затем последовательно перебирать элементы массивов аналогично тому, как мы делали в предыдущей программе (см. листинг 5.1). Такая программа, конечно же, будет работать, но ее можно усовершенствовать, как показано в листинге 5.2.

Листинг 5.2. Программа на ассемблере, выполняющая операцию ИЛИ для 1024 элементов массива

MOV R1,#0 ; собирает результаты выполнения ИЛИ в R1,

; изначально О MOV R2,#0 ; R2 = индекс. 1 от текущего


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

.