используйте slt для проверки сложения целых чисел без знака с флагом переноса mips

Я новичок в сборке, и я знаю, что это довольно простой вопрос. Я должен был выполнить сложение целых чисел без знака для $a0 и $a2 и сохранить результат в $v0, проверив флаг переноса.

В задании сказано:

Используйте только addu, а не add, для сложения и используйте slt для определения того, привело ли сложение двух целых чисел без знака к переносу, без использования инструкций условного перехода.

Вот мой код:

addu $v0, $a0, $a2
sltu $t0, $v0, $a0

Для этого кода, если создается перенос, $t0 равно 1. Но в вопросе говорилось, что для проверки флага переноса используйте только slt, и нельзя использовать инструкцию условного перехода. Я немного смущен тем, как это будет работать. Любая помощь будет оценена по достоинству.


person Serena Qi    schedule 03.11.2015    source источник
comment
Непонятно, что вы хотите сделать. Что должно произойти, если вы получили керри?   -  person Jester    schedule 03.11.2015
comment
@Jester: перенос должен храниться в $t0, я так понимаю.   -  person Michael    schedule 03.11.2015
comment
Да, просто сохраните перенос в $t0   -  person Serena Qi    schedule 03.11.2015
comment
Разве они на самом деле не имели в виду slt, любой из его вариантов и не рассматривали sltu как вариант? Потому что тестирование неподписанной обертки с реальным slt не имеет большого смысла (это можно сделать, но бессмысленно многословно)   -  person harold    schedule 03.11.2015
comment
Что ж, перенос уже находится в $t0, и ветвление не использовалось. Итак, если sltu разрешено, я не понимаю, в чем вопрос?   -  person Jester    schedule 03.11.2015
comment
В вопросе говорится, что Используйте только addu, а не add, для добавления и используйте slt для определения того, привело ли сложение двух целых чисел без знака к переносу, без использования инструкций условного перехода   -  person Serena Qi    schedule 03.11.2015
comment
Есть ли что-нибудь еще, что вы можете использовать? Например, and/or?   -  person Jester    schedule 03.11.2015
comment
Если вы должны использовать slt, вы можете сделать это с четырьмя addu и slt (уничтожит один из операндов, который можно восстановить с помощью пятого addu)   -  person harold    schedule 03.11.2015
comment
Я думаю, что могу использовать and или xor.   -  person Serena Qi    schedule 03.11.2015
comment
MIPS не имеет флага переноса. Ваш код почти правильный, но вы должны использовать slt вместо sltu, так как вы хотите выполнить сравнение со знаком, а не сравнение без знака.   -  person markgz    schedule 03.11.2015
comment
@markgz, если я использую slt, значение, хранящееся в $t0, равно 0?   -  person Serena Qi    schedule 03.11.2015
comment
Учтите, что a <u b = (a ^ signbit) <s (b ^ signbit), а также то, что переворачивание знака — это то же самое, что прибавление или вычитание 1 из него/к нему. Вы можете избежать sltu таким образом (и даже xor, если хотите).   -  person harold    schedule 03.11.2015
comment
См. также получить unsigned long long add Carry для формулы sum = a+b;/carry = sum<a;. (или sum<b, если так удобнее).   -  person Peter Cordes    schedule 29.06.2021


Ответы (1)


Хорошо, профессор сказал, что он неправильно понял вопрос, использование addu и sltu в порядке.

person Serena Qi    schedule 25.11.2016