2015-06-29 478 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),之後,如果你想在MIPS打印你說什麼..我存儲在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