MIPS(或SPIM):加载浮点数

Jam*_*mes 5 c mips spim

我在尝试学习一些MIPS时正在研究一个小型的迷你编译器.这是我的问题:

MIPS有一个指令li(立即加载),它会像这样工作

li $5,100
Run Code Online (Sandbox Code Playgroud)

这会将100加载到寄存器5中.

但是,我现在需要将浮动加载到寄存器中并且正在努力找出一种方法来实现它...因为li $ 5,2.5不起作用.

有人有什么建议吗?

我在C工作,我想我可以以某种方式得到我正在使用的浮点数的整数表示(即浮点二进制表示== ints二进制表示)然后将"整数"加载到寄存器中并将其视为从那以后浮动.

也许为时已晚,但我现在卡住了.

Zac*_*ack 17

MARS 似乎没有任何指令/伪指令将浮点立即值加载到浮动寄存器中.相反,您需要将浮点值放在内存中并从内存加载寄存器:

.data
fp1: .double 2.5
fp2: .double -0.75

.text   
l.d $f0, fp1
l.d $f2, fp2
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个答案应该被接受,因为大多数用户使用 MARS 作为他们的编辑器。 (2认同)

Whi*_*ind 8

您需要使用浮点寄存器来加载浮点数.

代替:

li $5,2.5
Run Code Online (Sandbox Code Playgroud)

尝试:

li.s $f5,2.5
Run Code Online (Sandbox Code Playgroud)

看看mfc1和mtc1指令在整数和浮点寄存器之间移动.

  • 这似乎是一个伪指令.我怎么会真正去做呢?(MARS不支持li.s).我唯一能想到的是将25加载到$ t0,将10加载到$ t1,将每个加载到float,然后除. (4认同)