В моем ассемблере mips я использовал многоструйную инструкцию для умножения 2 больших чисел, так как результат не мог поместиться в один регистр. Это означает, что число сохраняется в специальных регистрах hi и lo. Моя проблема заключается в том, как напечатать результат умножения. Я могу получить доступ к hi и lo и поместить их в другие регистры (т. Е. $ T0, $ t1), но я не знаю, как объединить два числа, чтобы распечатать результат. Благодарю.Как напечатать число размером более 32 бит в сборке mips?
ответ
(Этот ответ хранится намеренно высокого уровня, так как я уверен, что цифры никто не печатает в сборке MIPS, если они не делают это для домашнего задания.)
Если вы не прочь получить его в шестнадцатеричном виде это не проблема; просто напечатайте одно слово в шестнадцатеричном виде, а затем следующее. Не забудьте включить ведущие нули во второе слово! (На самом деле, я думаю, что spim, который, как я полагаю, вы используете, может печатать только в базе 10, так что даже это может быть немного сложной задачей).
Если вы хотите его в базе 10, эта проблема быстро переходит в категорию, которую я бы назвал «боль-в-заднице». В «реальной жизни» я не стал бы беспокоиться; сделайте печать на C, какой-то парень-компилятор где-то решил все эти проблемы для вас. Для домашней работы напишите себе функцию, которая много раз делит вход на 10, и в конечном итоге вы получите цифры для распечатки. Если у mips нет 64-битной инструкции деления (не могу сказать вам с головы), это будет довольно забавная проблема для вас.
решение для печати номера действительно делит число раз на 10 и получает остальную часть деления и сохраняет в строке, а затем читает ее вверх дном. Но единственная задача - разделить 64-битное число, если mips32 имеет только 32-разрядное деление. Я нашел способ на этой странице:
https://www.codeproject.com/questions/714114/how-to-print-bit-in