Сравнение 0x00000000 с 0xFFFFFFFF в MIPS - PullRequest
5 голосов
/ 03 июня 2011

Я пытаюсь отсортировать список 32-битных чисел, используя ассемблер MIPS и xspim . Я прошел через мой код, чтобы увидеть, что не получается, и заметил, что при сравнении 0x00000000 с 0xFFFFFFFF эти цифры не сравниваются должным образом. В тот момент, когда программа перестала работать, я получил 0x00000000 в $ t3 и 0xFFFFFFFF в $ t4, и это выглядит так:

bge $t3,$t4,lol # Так что, если t3 больше или равно, я должен прыгнуть вперед, иначе продолжить. Теперь проблема в том, что программа скачет, хотя t3 меньше.

1 Ответ

4 голосов
/ 03 июня 2011

Это потому, что 0xffffffff интерпретируется как -1, то есть в 2-х дополнениях.

Существуют специальные инструкции для работы с числами, как если бы они были без знака.Используйте эти инструкции.(Сравните, например, bgt и bgtu, где u означает без знака.)

...