0
也許我不知道如何使用浮點指令。我想讀一個浮點數,做一些操作並將結果再次打印爲浮點數,但SPIM在這裏給出了一個錯誤mov.s $f0, $v0
。我認爲每當使用浮點指令時,我必須給出兩個$f
寄存器,對吧?但是我怎樣才能複製$v0
中的某些東西,因爲系統調用需要這樣做?浮點指令
這是我的代碼
.data 0x10010000
prompt: .asciiz "Write 0 to °C -> °F\Write 1 for °F ->°C;\n"
ctof: .asciiz "Degree in Fahrenheit: "
ftoc: .asciiz "Degree in Celsius: "
error: .asciiz "Error: write 0 o 1\n\n"
.text 0x400000
main: la $a0, prompt
li $v0, 4
syscall #print prompt
li $v0, 5
syscall #read integer
beq $v0, 0, c_to_f
beq $v0, 1, f_to_c
la $a0, error
li $v0, 4
syscall #print error
j main
c_to_f: la $a0, ftoc
li $v0, 4
syscall #print ftoc
li $v0, 6
syscall #read degree as float
mov.s $f0, $v0
mul.s $f0, $f0, 9.0
div.s $f0, $f0, 5.0
add.s $f0, $f0, 32.0
la $a0, ctof
li $v0, 4
syscall #print ctof
move $f12, $f0
li $v0, 2
syscall #print result
li $v0, 10
syscall #exit
假指令'mul.s $ f0,$ f0,9.0'和下面的其他兩個呢? Spim給我一個語法錯誤。不使用'$ at'來轉換指令?我應該使用'li.s $ f1,9.0'將常量放在'$ f'寄存器中嗎? – Shika93
SPIM可能不支持這些僞指令。你應該可以像你所建議的那樣使用'li.s'。請注意,如果在其餘代碼中使用單精度浮點數,則在將整數轉換爲浮點時,應該使用'cvt.s.w'而不是'cvt.d.w'。 – Michael
當然!謝謝! – Shika93