2009-08-15 4 views
14

Итак, я изучаю MIPS, используя симулятор SPIM, и я застрял в этой проблеме.Добавление двух 64-битных чисел в сборке

Я хочу добавить два 64-битных номера, которые хранятся в четырех 32-битных регистрах. Поэтому я добавляю байты LO, а затем байты переноса и HI. Но нет команды adc/addc, то есть add with carry.

Поэтому я должен добавить бит переноса в регистр состояния. Но как именно я читаю этот регистр?

Если $ t0 является временным регистром 1, то каков эквивалент регистра статуса, который содержит флаг переноса?

У меня много googled Я до сих пор не могу найти примеров, которые даже используют регистр состояния.

+0

нет статуса или зарегистрировать флаг в MIPS –

ответ

21

Добавить $ t2 $ t3 + t4 $ $ t5, в результате $ t0 $ t1

addu $t1, $t3, $t5 # add least significant word 
sltu $t0, $t1, $t5 # set carry-in bit 
addu $t0, $t0, $t2 # add in first most significant word 
addu $t0, $t0, $t4 # add in second most significant word 

Для второй части Вашего вопроса, то нет регистра состояния. Вовсе нет. Нада.

+0

Спасибо. Это имеет смысл, почему я не смог найти регистр статуса :) Ваш ответ работает отлично. Есть ли место с советами по лучшей кодировке MIPS? – 2009-08-15 21:28:39

+0

Их немного. Для меня, медитация над другими людьми источник или поиск objdump -S действительно работает. Вы можете учиться на редких случаях, когда компилятор делает что-то правильно, но вы можете узнать еще больше из мест, где они производят полное дерьмо, как обычно ;-) http://www.cs.unibo.it/~ solmi/teaching/arch_2002-2003/AssemblyLanguageProgDoc.pdf также дает некоторые полезные советы. – hirschhornsalz

+0

Отличное решение. Мне это нравится, когда решения проблем с явно выраженными проблемами (IMHO) являются такими элегантными. – Derek

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