Я запутался в различии между add и addu.
В инструкции к MIPS говорится:
- добавить (с переполнением)
- добавить unsigned (без переполнения)
Мое понимание заключается в использовании add с подписанными операндами и addu с неподписанными операндами.
Но рассмотрим этот пример (только с 6 бит):
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
И это мои рассуждения:
- Если я рассмотрю первый и второй операнды подписанные числа (два дополнения), то результат будет правильным (-3 + -2 = -5), и я не хочу исключения переполнения. Поэтому я бы использовал addu, чтобы избежать этого исключения, но, хотя результат тот же, имя предполагает использовать addu для неподписанных номеров!
- Если я рассматриваю первый и второй операнды unsigned, то я хочу, чтобы исключение было поднято (потому что 61 + 62 не равно 59). Поэтому я бы использовал add для создания исключения, а не addu, как это предполагалось бы именем.
Теперь мои вопросы:
- Предполагая, что операнды подписаны (отрицательные в приведенном выше примере) числах, следует ли использовать addu (как следует из моих рассуждений), или я должен использовать add (как следует из названия)?
- Предполагая, что операнды являются неподписанными (положительными) числами, следует ли использовать add (как я полагаю) или addu (как следует из названия)?