Я занимался курсом компьютерной организации год назад, и теперь у меня есть последующий подход к нему как «Компьютерная архитектура», я использую 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)?
Просьба дать подробный обзор этого, чтобы я мог следить за остальными темами. Спасибо
Ваши сомнения, похоже, не связаны с ILP. Места памяти произвольно выбираются программистом, а не компилятором. Отдельные инструкции могут выбираться произвольно, пока они выполняют свою работу. – Potatoswatter
Как я понял, мои сомнения лежат с кодом MIPS, новым для него, а не с ILP, я предполагаю, что DADDUI означает, что результат не станет отрицательным, а не то, что он не может работать на отрицательных числах, я прав? –
Разве вы не должны «там» где-то? –