Сумма двух 64-битных целых чисел без знака QtSpim

Предположим, что регистры $a1 и $a0 содержат 64-разрядное целое число без знака

A = $a1 × 2^32 + $a0

и регистры $a3 и $a2 содержат 64-разрядное целое число без знака

B = $a3 × 2^32 + $a2.

Как бы я мог вычислить сумму A и B и сохранить ее в $v1, $v0 так, чтобы

A + B = $v1×2^32 + $v0. 

Не уверен, как бы я подошел к этой проблеме, любая помощь будет высоко ценится.

1 ответ

Я бы добавил попарно младшие значащие слова и самые значимые слова каждого числа, затем "вычислил" половинный перенос и увеличил бы наиболее значимое слово суммы, если произошел перенос.

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

Что-то вроде этого:

  addu $v0, $a2, $a0
  addu $v1, $a3, $a1
  bgt $a0, $v0, carry  
  ble $a2, $v0, done
carry:
  addiu  $v1, $v1, 1
done:  
Другие вопросы по тегам