Почему делают операции MIPS на неподписанных числах дают подписанные результаты?

Когда я пытаюсь работать над целыми числами без знака в MIPS, результат каждой операции, которую я делаю, остается со знаком (то есть, целые числа - все в 2's дополнение), даже при том, что каждая операция, которую я выполняю, является неподписанной: addu, multu и таким образом четвертый...

Когда я печатаю числа в диапазоне [2^31, 2^32 - 1] Я получаю их 'переполненную' отрицательную величину, как будто они были подписаны (я предполагаю, что они).

Хотя, когда я пробую что-то вроде этого:

li $v0, 1
li $a0, 2147483648                # or any bigger number
syscall

печатное число всегда 2147483647 (2^31 - 1)

Я смущен... Что я пропускаю?

PS: Я не включал свой код, поскольку это не очень читаемо (такой, ассемблерный код), и откладывающий эту проблему, кажется, хорошо работает. Если кто-либо чувствует, что необходимо, чтобы я включал его сразу же!

14
задан Bill the Lizard 21 September 2012 в 17:24
поделиться

2 ответа

Из Википедии:

Набор инструкций MIPS32 гласит, что слово unsigned в составе инструкции Add and Subtract (Добавить и вычесть) - это неправильный термин. Разница между подписанной и неподписанной версиями команд не является знаковым расширением (или его отсутствием) операндов, а управляет тем, выполняется ли ловушка при переполнении (например, Add) или переполнение игнорируется (Add unsigned). Непосредственный операнд CONST для этих инструкций всегда является знаковым расширением.

Из MIPS Instruction Reference:

ВСЕ значения немедленной арифметики являются знаковыми расширениями [...] Единственное различие между знаковыми и неподписанными инструкциями заключается в том, что подписанные инструкции могут генерировать исключение переполнения, а неподписанные инструкции - нет.

19
ответ дан 1 December 2019 в 12:52
поделиться

Похоже, что настоящая проблема - это системный вызов, который вы используете для печати чисел. Похоже, что он всегда интерпретирует то, что вы передаете как подписанное, а также, возможно, и как связанное.

2
ответ дан 1 December 2019 в 12:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: