MIPS: могу ли я получить неподписанное значение int от пользователя через системный вызов?

#mips #system-calls #unsigned-integer #mips32

#mips #системные вызовы #целое число без знака #mips32

Вопрос:

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

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

Примечания:

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

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

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

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

Ответ №1:

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

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

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

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

Комментарии:

1. Это хороший момент в отношении источника исключения. Что касается предложения либо прочитать в виде строки и проанализировать значение, либо использовать другой числовой формат — я рассмотрел это, и, если бы это было важно для назначения, я бы это сделал; в нынешнем виде мне просто любопытно, есть ли поддерживаемый способ чтения целых чисел без знака через системный вызов.

2. Я отредактировал ссылку на полный список системных вызовов MARS в своем ответе. К сожалению, я не вижу там ничего, что выглядит применимым.