#mips #system-calls #unsigned-integer #mips32
#mips #системные вызовы #целое число без знака #mips32
Вопрос:
Название в значительной степени подводит итог. Я пишу программу на 32-разрядном языке ассемблера MIPS (с использованием эмулятора MARS) для школьного проекта, и мне не повезло с чтением значений int> 2,147,483,647.
Я потратил приличное количество времени на поиски в Интернете и в своей книге, но безрезультатно. Это не главное в назначении (что, если вы случайно знаете, что это невозможно, вы, вероятно, уже поняли), но любопытство убивает эту кошку. Теперь, когда я наткнулся на эту кирпичную стену, я должен знать наверняка.
Примечания:
- Я специально ищу способ получить unsigned int, а не принимать значение с плавающей точкой или double .
-
Стандартный код для захвата int с помощью системного вызова:
li $v0, 5 syscall move $t0, $v0
-
Ошибка, возникающая при передаче 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 в своем ответе. К сожалению, я не вижу там ничего, что выглядит применимым.