2
votes

I'm new to Assembly and I know this is a fair easy question. I supposed to do unsigned integer addition for $a0 and $a2 and store the result in $v0 by checking the carry flag.

The assignment says:

Use only addu, not add, for adding and use slt for determining if the addition of two unsigned integers produced a carry, without using conditional branch instructions.

Here is my code:

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

For this code, if a carry is produced, $t0 equals 1. But the question said use only slt to check the carry flag and no conditional branch instruction can be used. I'm a little bit confused about how this is gonna to work. Any help would be appreciated.

1
It's unclear what you want to do. What should happen if you got carry? - Jester
@Jester: the carry should be stored in $t0, I take it. - Michael
Yep, just store the carry in $t0 - Serena Qi
Didn't they actually mean "slt, any of its variants" and consider "sltu" to be a variant? Because testing unsigned wrapping with an actual slt makes little sense (it can be done, but in a pointlessly verbose way) - harold
Consider that a <u b = (a ^ signbit) <s (b ^ signbit), and also that flipping the sign is the same as adding or subtracting 1 to/from it. You can avoid sltu that way (and even xor, if you want). - harold

1 Answers

0
votes

OK, the professor said he got the question wrong, using addu and sltu are fine.