MIPS: Могу ли я получить неподписанное значение int от пользователя через системный вызов? - PullRequest
2 голосов
/ 07 октября 2011

Название в значительной степени подводит итог. Я пишу программу на 32-битном языке ассемблера MIPS (с использованием эмулятора MARS) для школьного проекта, и мне не хватает чтения при значениях int> 2 147 483 647.

Я потратил приличное количество времени на поиски в Интернете и в своей книге безрезультатно. Это не главное в задании (которое, если вы знаете, что это невозможно, вы, вероятно, уже поняли), но любопытство убивает эту кошку. Теперь, когда я врезался в эту кирпичную стену, я должен знать наверняка.

Примечания:

  1. Я специально ищу способ получить беззнаковое целое число вместо того, чтобы брать поплавок или дубль.
  2. Стандартный код для получения int с помощью syscall:

    li $v0, 5
    syscall
    move $t0, $v0
    
  3. Ошибка, возникающая при передаче 2 500 000 000 в запросе целого числа:

    Error in C:\DEV\....... line 57: Runtime exception at 
    0x004000034: invalid integer input (syscall 5)
    

Помоги мне, Оби-Ван, ты моя единственная надежда!

1 Ответ

0 голосов
/ 07 октября 2011

Вам нужно будет использовать другой системный вызов - MARS выдает исключение, а не что-либо «внутри» процессора MIPS. Попробуйте, например, syscalls 8 или 12 (прочитать строку и прочитать символ). Обратите внимание, что в результате вам придется выполнять намного больше разборов самостоятельно, чтобы заставить их работать.

В качестве альтернативы, вы можете попробовать прочитать double (системный вызов 7) и преобразовать его в целое число ...

Полный список системных вызовов MARS онлайн:

http://courses.missouristate.edu/KenVollmar/MARS/Help/SyscallHelp.html

...