Как умножить два числа в MIPS, что дает продукт, который больше, чем 32 бита? - PullRequest
0 голосов
/ 31 марта 2019

На самом деле, моя задача состоит в том, чтобы умножить два 32-битных числа в MIPS, которые затем генерируют 64-битные выходные данные. Наименее значимые 32 бита должны быть сохранены в регистре 'lo', а остальные в регистре 'hi', насколько я понимаю.

Когда я умножаю 100000 и 200000, я получаю a817c800 в регистре 'lo' и 4 в регистре 'hi'

mult $t1, $t2 
    mflo $s0
    mfhi $s1 

enter image description here

1 Ответ

1 голос
/ 31 марта 2019

Когда я умножаю 100000 и 200000, я получаю a817c800 в регистре 'lo' и 4 в регистре 'hi'

Correct.

Поскольку результат имеет ширину 64 бита, и вы используете 32-разрядный процессор MIPS, вам нужно два регистра для хранения результата.

В вашем коде старшие 32 бита находятся в s1, а младшие 32 бита - в s0. Таким образом, два регистра s1 и s0 представляют 64-битное значение 4a817c800 (шестнадцатеричное), которое составляет 20000000000 (десятичное). И это правильный результат.

Ваш следующий вопрос может быть о том, как вы можете распечатать 64-битное число с помощью qtspim. К сожалению, у меня нет опыта работы с симуляторами MIPS (только с реальными процессорами MIPS), поэтому я не знаю, возможно ли это вообще.

...