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