MIPS (ou SPIM): Carregando números de ponto flutuante
Pergunta
Estou trabalhando em um pequeno mini compilador enquanto tento aprender alguns MIPs aqui. Aqui está o meu problema:
MIPS tem uma instrução li (carregar imediato) que funcionaria assim
li $5,100
que carregaria 100 no registro 5.
No entanto, preciso carregar flutuadores nos registros agora e estou lutando para descobrir uma maneira de fazê -lo ... já que Li $ 5,2,5 não funciona.
Alguém tem algum conselho?
Estou trabalhando em C, eu estava pensando que poderia de alguma forma obter a representação inteira do flutuador com o qual estou trabalhando (ou seja, para que a representação binária dos flutuadores == a representação binária do INTS) então carregue o "número inteiro" no registro e o tratam como um flutuador a partir de então.
Talvez seja tarde demais, mas estou preso agora.
Solução
Você precisará usar os registros de ponto flutuante para carregar seus carros alegóricos.
Ao invés de:
li $5,2.5
Tentar:
li.s $f5,2.5
Dê uma olhada nas instruções MFC1 e MTC1 para se mover entre os registros inteiros e o ponto flutuante.
Outras dicas
Marte não Parece ter instruções/pseudo -instruções que carregam valores imediatos do ponto flutuante nos registros flutuantes. Em vez disso, você precisa colocar o valor do ponto flutuante na memória e carregar o registro da memória:
.data
fp1: .double 2.5
fp2: .double -0.75
.text
l.d $f0, fp1
l.d $f2, fp2