Как я могу напечатать число больше 32 бит в сборке MIPS? - PullRequest
3 голосов
/ 06 февраля 2010

В моем коде ассемблера mips я использовал команду multi для умножения 2 больших чисел, поскольку результат не может поместиться в одном регистре. Это означает, что номер сохраняется в специальных регистрах hi и lo. Моя проблема в том, как мне распечатать результат умножения. Я могу получить доступ к hi и lo и поместить их в другие регистры (т. Е. $ T0, $ t1), но я не знаю, как объединить два числа для вывода результата. Спасибо.

Ответы [ 2 ]

3 голосов
/ 06 февраля 2010

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

Если вы не возражаете получить его в гексе, это не проблема; просто напечатайте одно слово в шестнадцатеричном виде, а затем следующее. Не забудьте включить ведущие нули во второе слово! (На самом деле, я думаю, что spim, который, как я полагаю, вы используете, может печатать только на базе 10, так что даже это может быть непростой задачей).

Если вы хотите, чтобы это было в базе 10, эта проблема быстро переходит в категорию, которую я бы назвал «боль в заднице». В «реальной жизни» я бы не стал беспокоиться; сделать печать на C, какой-то парень компилятор где-то решил все эти проблемы для вас. Для домашней работы напишите себе функцию, которая многократно делит ввод на 10, и в итоге вы получите цифры для распечатки. Если у mips нет 64-битной инструкции деления (не могу сказать вам, что у меня в голове), это будет довольно забавная проблема для вас.

0 голосов
/ 02 декабря 2016

решение для печати числа действительно делит число многократно на 10 и получает остаток от деления и сохраняет его в строке, а затем читает его вверх ногами. Но единственная проблема - разделить 64-битное число, если mips32 имеет только 32-битное деление. Я нахожу способ на этой странице:

https://www.codeproject.com/questions/714114/how-to-print-bit-in

...