Сумма двух 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: