Используйте инструкции с плавающей запятой, чтобы получить результаты в десятичном виде - PullRequest
5 голосов
/ 29 июня 2011

Привет, я пишу небольшую программу в MIPS, которая делит 2 на 9 и показывает результат. Это код

li $t1, 2
li $t2, 9
li $v0, 2
div $t0,$t2,$t1
move $a0,$t0
syscall

(это не полный код, просто раздел обработки разделов)

Итак, 2/9 - это 0,2222222222222222

Но когда я запускаю его, я получаю только 0.0

Как мне показать истинный результат (0,2222222222222222)?

Мне говорили, что я использую целое число вместо плавающей запятой, что я должен использовать инструкции с плавающей запятой, чтобы получить результаты в десятичном виде. Чтобы я посмотрел инструкцию div.x, но div.x не является распознанным оператором.

Итак, я почти ничего не знаю. Я не понимаю, что делать.

Может ли кто-нибудь опубликовать код для отображения результата с плавающей запятой?

Заранее спасибо.

Ответы [ 4 ]

6 голосов
/ 30 июня 2011

Хорошо, после долгих попыток и ошибок правильный способ напечатать истинный результат:

Установите 2 регистра с плавающей запятой, используя псевдо li.s (Спасибо Полу R за указание меня в правильном направлении)

li.s $f1, 2.0
li.s $f2, 9.0

Очевидно, подготовьте к печати с плавающей точкой

li $v0, 2

При делении вместо div $t0,$t2,$t1 я должен использовать

div.s $f12,$f1,$f2

и вместо move $a0,$t0Я должен просто

syscall

Нет необходимости перемещать, div.s распечатывает результат сразу, поэтому нет реальной необходимости перемещать содержимое $ f12 в $ a0 для печати его содержимого.

Это настоящий позор, что Марс не влияет на псевдо ли.Я должен был попробовать это на PCSPIM ...

Окончательный код:

.globl main
.text
main:
li.s $f1, 2.0
li.s $f2, 9.0
li $v0, 2
div.s $f12,$f1,$f2
syscall
li $v0, 10
syscall

Когда вы запустите его, вы получите 0.22222222, истинный результат деления 2 на 9.

4 голосов
/ 29 июня 2011

Это целочисленная инструкция деления, поэтому 2 / 9 = 0 - правильный результат.Попробуйте, например, 27 / 9, и вы получите результат 3.

0 голосов
/ 29 июня 2011

Не зная полных целей, возможно, достаточно использовать удобный целочисленный ярлык: разделить 2 миллиарда на 9 и показать это с искусственно вставленной десятичной точкой.В C это будет что-то вроде

printf ("0.%d", 2000000000 / 9);
0 голосов
/ 29 июня 2011

Вы делаете целочисленное деление. Используйте инструкции с плавающей запятой, чтобы получить результаты в десятичном виде. Посмотрите инструкцию div.x.

...