2015-03-29 5 views
1

Я занимался курсом компьютерной организации год назад, и теперь у меня есть последующий подход к нему как «Компьютерная архитектура», я использую 3-е издание книги Джона Хеннесси «Количественный подход к компьютерной архитектуре», я прошел через MIPS ISA, но все еще нужна помощь, вы можете объяснить эту строку кода более подробноМожет ли кто-нибудь объяснить это проще?

Исходный код: код

for(i=1000; i>0; i--) 
    x[i] = x[i] + s; 

Монтаж:

Loop:  L.D   F0, 0(R1)   ; F0 = array element 
       ADD.D  F4, F0, F2  ; add scalar 
       S.D   F4, 0(R1)   ; store result 
       DADDUI  R1, R1,# -8  ; decrement address pointer 
       BNE   R1, R2, Loop ; branch if R1 != R2 

Это приведено в качестве примера для разворачивания цикла для использования ILP, у меня есть несколько сомнений. Я понимаю, что массив начинается с Mem [0 + R1] и идет назад до Mem [R + 8] (как указано в тексте), любая причина для этого или они просто случайно выбрали это местоположение?

Также зачем использовать DADDUI (без знака), когда мы добавляем подписанный номер (-8)?

Просьба дать подробный обзор этого, чтобы я мог следить за остальными темами. Спасибо

+0

Ваши сомнения, похоже, не связаны с ILP. Места памяти произвольно выбираются программистом, а не компилятором. Отдельные инструкции могут выбираться произвольно, пока они выполняют свою работу. – Potatoswatter

+0

Как я понял, мои сомнения лежат с кодом MIPS, новым для него, а не с ILP, я предполагаю, что DADDUI означает, что результат не станет отрицательным, а не то, что он не может работать на отрицательных числах, я прав? –

+0

Разве вы не должны «там» где-то? –

ответ

3

Доступ к памяти осуществляется для адмишей и в порядке, указанном в исходном коде.

Для выполнения такой адресной арифметики достаточно выполнить команду daddiu. «Отрицательное» значение выполняет вычитание в двухзначном дополнении. Адреса не являются ни отрицательными, ни позитивными; они просто битовые шаблоны. Обратитесь к ISA reference, чтобы узнать больше о MIPS и инструкциях.

16-разрядное знаковое немедленного добавляется к 64-битовым значением в GPR RS и 64-битный результат арифметической помещают в GPR к.т.. Нет Целое число Исключение переполнения происходит при любых обстоятельствах.

...

Термин «без знака» в названии инструкции является неправильным; эта операция - 64-битная по модулю арифметика, которая не ловушка при переполнении. Он подходит для арифметики без знака, такой как арифметика адреса или целочисленные арифметические среды, которые игнорируют переполнение, например, арифметику языка C.

Пример не оптимизирован или не развернут. Это просто буквальный перевод источника.

+0

Спасибо, что очистил его –

Смежные вопросы