mips - Difference between add and addu -
i confused difference between add , addu.
the mips instruction reference says:
- add (with overflow)
- add unsigned (no overflow)
my understanding use add signed operands , addu unsigned operands.
but let's consider example (with 6bit):
overflow | v 1 | 1 1 1 <- carry | 1 1 1 1 0 1 + | 1 1 1 1 1 0 = ----------------- | 1 1 1 0 1 1
and reasoning:
- if consider first , second operand signed numbers (two's complement), result correct (-3 + -2 = -5) , don't want overflow exception. use addu avoid exception, but, although result same, name suggests use addu unsigned numbers!
- if consider first , second operand unsigned numbers, want exception raised (because 61 + 62 not equal 59). use add raise exception, , not addu, name suggest do.
now questions are:
- assuming operands signed (negative in example above) numbers, should use addu (as reasoning suggests) or should use add (as name suggests)?
- assuming operands unsigned (positive) numbers, should use add (as reasoning suggests) or addu (as name suggests)?
the instruction names misleading. use addu
both signed , unsigned operands, if not want trap on overflow.
use add
if need trap on overflow reason. languages not want trap on signed overflow, add
useful.
Comments
Post a Comment