2015-06-29 4 views
0

Я новичок в программировании в MIPS, и мне трудно понять, как я могу умножить два поплавка после прочтения их от пользователя. Как получить аргумент в число с плавающей запятой с одной точностью? Когда я запускаю программу, она печатает результат как 0.0 вместо числа, умноженного на константу. Может кто-нибудь объяснить мне, почему он печатает 0.0 вместо правильного номера?Умножение с плавающей запятой MIPS

.data 

prompt: .asciiz "Enter the amount: " 

newline: .asciiz "\n" 

float1: .float 0.0 

const: .float 121.28  

.text 

.globl main 

main: 


li $v0, 4  #calls print_string code 4 
la $a0, prompt #pointer to string 
syscall 

#get amount from user 
li $v0, 6  #call read_float code 6 
syscall 
la $a0, float1 #loads address of float1 
l.s $f1, 0($a0) #a0 --> float1 
la $a1, const #loads address of const 
l.d $f2, 0($a1) #a1 --> float2 

#calculates 
mul.s $f1, $f1, $f2 #f1 = f1*f2 

#prints resulting amount 
li $v0, 2  #calls print_float code 2 
syscall 

#continual loop 
li $v0, 4  #calls print_string code 4 
la $a0, newline #pointer to string 
syscall 

j main   #jumps to beginning of main 
+1

Если вы думаете, немного должно быть очевидно, что 'read_float' не может волшебным образом прочитать ввод в' float1'. Таким образом, вы умножаетесь на ноль. Если вы обратитесь к руководству, вы увидите, что 'read_float' возвращает значение в' $ f0'. Также научитесь использовать отладчик. – Jester

ответ

0

Он печати 0, потому что ты умноженное на 0 .. после вызова для входа вы не храните его (s.s $f0, float1 #store the input), после этого, если вы хотите напечатать в трудоемкости вы должны сказать, что .. Я сохранил результат операции в float1 снова (s.s $f1, float1 #store multiplied float) затем печатаются йотой правильного вызова l.s $f12, float1 #print multiplied float Не забывайте использовать правильный регистр для функции системного вызова Это рабочего код основного

main: 


li $v0, 4  #calls print_string code 4 
la $a0, prompt #pointer to string 
syscall 

#get amount from user 
li $v0, 6  #call read_float code 6 
syscall 

s.s $f0, float1 #store the input 

la $a0, float1 #loads address of float1 
l.s $f1, 0($a0) #a0 --> float1 
la $a1, const #loads address of const 
l.d $f2, 0($a1) #a1 --> float2 

#calculates 
mul.s $f1, $f1, $f2 #f1 = f1*f2 

s.s $f1, float1 #store multiplied float 

#prints resulting amount 
li $v0, 2  #calls print_float code 2 
l.s $f12, float1 #print multiplied float 
syscall 

#continual loop 
li $v0, 4  #calls print_string code 4 
la $a0, newline #pointer to string 
syscall 

j main 
Смежные вопросы