Статус нашего сайта: |
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 |
Таненбаум Э.- Архитектура компьютера. стр.288; произведения A[i] И B[i] MOV R3,#4096 ; R3 = первое ненужное значение индекса LOOP: MOV R4,A(R2) ; R4 = A[i] AND R4,B(R2) ; R4 = A[i] И B[i] OR R1.R4 ADD R2,#4 ; i = i + 4 CMP R2.R3 ; нужно ли продолжать? BLT LOOP ; если R2 < R3, нужно продолжать Здесь нам требуется 4 регистра: + R1 — содержит результаты суммирования логических произведений; + R2 — индекс г, который используется для перебора элементов массива; + R3 — константа 4096 (это самое маленькое значение г, которое не используется); + R4 — временный регистр для хранения каждого произведения. После инициализации регистров мы входим в цикл из шести команд. Команда с меткой LOOP вызывает элемент Д в регистр R4. При вычислении источника здесь используется индексная адресация. Регистр (R2) и константа (адрес элемента А) складываются, полученный результат служит для обращения к памяти. Сумма этих двух величин поступает в память, но не сохраняется ни в одном из доступных пользователю регистров. Следующая запись означает, что для определения приемника используется регистровая адресация, а для определения источника — индексная: MOV R4.ACR2) Здесь R4 — это регистр, А — смещение, R2 — регистр. Если А имеет значение, скажем, 124 300, то соответствующая машинная команда будет выглядеть так, как показано на рис. 5.14. Рис. 5.14. Возможное представление команды MOV R4, A(R2) в памяти Во время первого прохождения цикла регистр R2 принимает значение 0 (так регистр инициализируется), поэтому нужное нам слово А0 находится в ячейке с адресом 124 300. Это слово загружается в регистр R4. При следующем прохождении цикла R2 принимает значение 4, поэтому нужное нам слово Д находится в ячейке с адресом 124 304 и т. д. Как мы отмечали, здесь смещение — это указатель ячейки памяти, а значение регистра — это небольшое целое число, которое во время вычисления меняется. Такая форма требует, чтобы поле смещения в команде было достаточно большим для хранения адреса, поэтому такой способ не очень эффективен, однако он часто оказывается самым лучшим. Относительная индексная адресация В некоторых машинах применяется режим адресации, при котором адрес вычисляется путем суммирования значений двух регистров и смещения (смещение факультативно). Такой режим называется относительной индексной адресацией. Один из регистров — это база, другой — индекс. Относительная индексная адресация очень удобна при следующей ситуации. Вне цикла мы могли бы поместить адрес элемента А в регистр R5, а адрес элемента В — в регистр R6. Тогда можно было бы заменить две первые команды цикла LOOP: LOOP: MOV R4,(R2+R5) AND R4,(R2+R6) Было бы идеально, если бы существовал режим адресации по сумме двух регистров без смещения. В то же время даже команда с 8-разрядным смещением была бы большим достижением, поскольку оба смещения можно сделать нулевыми. Однако если смещение всегда составляет 32 бита, тогда мы ничего не выиграем, использовав такой режим адресации. На практике машины с относительной индексной адресацией обычно имеют форму с 8- или 16-разрядным смещением. |