2009-12-29 4 views
10

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

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

Хотя, когда я пытаюсь что-то вроде этого:

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

напечатанный номер всегда 2147483647 (2^31 - 1)

Я запутался ... Что мне не хватает?

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

ответ

14

От Wikipedia:

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

Из MIPS Instruction Reference:

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

+0

Я искал всю сеть для ответа ... везде, но очевидно. благодаря! – dankilman

+0

Тогда почему они используют терминологию «подписанный и неподписанный» вместо чего-то вроде «checked and unchecked»? – dan04

+0

Это неправильное название. Прочитайте первую цитату. –

1

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