2017-02-05 3 views
0

У меня есть программа, которая читает 2 целых числа, делит их, чтобы получить выход как float. Например, 2/3 = 0,66666666. Я написал следующую программу.Код MIPS для чтения 2 целых чисел и деления их на получение выходных данных float?

.data 
prompt1: .asciiz "Enter x: " 
prompt2: .asciiz "Enter y: " 
floatzero: .float 0.0 

.text 
main: 
    l.s $f4, floatzero 
    li $v0, 4 
    la $a0, prompt1 
    syscall 

    li $v0, 6 
    syscall 

    add.s $f12 , $f0 , $f4 


    li $v0, 4 
    la $a0, prompt2 
    syscall 

    li $v0, 6 
    syscall 

    add.s $f14, $f0, $f4 

    li $v0 , 2 
    div.s $f16, $f12, $f14 
    syscall 

    li $v0, 10 
    syscall 

Теперь у меня есть следующие сомнения: 1. Для 2/3 Это показывает выход составляет 2,0000000. Что я должен исправить, чтобы получить 0.66666666?

  1. Есть ли какой-либо метод, который я могу использовать для прямого перемещения входного значения от $ v0 до некоторого $ f2. Здесь я использую add.s (которые тоже doesent, похоже, работают хорошо). ?

  2. Почему я не могу просто вводить ввод как целое, сохранять его в целочисленном формате (например, $ a1), а затем делить его, чтобы сохранить ответ в поплавком формате?

P.S. Это моя домашняя работа, но для ее решения нужны базовые концепции. Пожалуйста помоги.

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

ответ

2
  1. Вы хранение фактора в $f16, но системный вызов 2 ожидает, что значение для печати в $f12.

  2. mov.s $f2, $f0

  3. Вы можете, но вы должны будете перемещать целые значения в регистры с плавающей точкой и преобразовывать их в значения с плавающей точкой перед делением. Целое деление между 2 и 3 просто даст вам 0. Вопросы о том, как сделать это преобразование, уже заданы несколько раз, так что Google, например. "mips int to float".