MIPS (или SPIM): загрузка чисел с плавающей запятой

Я работаю над небольшим мини-компилятором, пытаясь изучить MIPS здесь. Вот моя проблема:

В MIPS есть инструкция li (немедленная загрузка), которая будет работать следующим образом

li $5,100

который загрузит 100 в регистр 5.

Тем не менее, мне нужно загрузить поплавки в регистры прямо сейчас, и я пытаюсь найти способ сделать это... так как li $5,2.5 не работает.

У кого-нибудь есть совет?

Я работаю в C, я думал, что мог бы каким-то образом получить целочисленное представление с плавающей точкой, с которой я работаю (то есть, так что двоичное представление с плавающей точкой == двоичное представление ints), затем загрузить "целое число" в регистр и обрабатывать его как поплавок с тех пор.

Может быть, уже слишком поздно, но я застрял прямо сейчас.

2 ответа

Решение

Вам нужно будет использовать регистры с плавающей запятой для загрузки ваших поплавков.

Вместо:

li $5,2.5

Пытаться:

li.s $f5,2.5

Посмотрите на инструкции mfc1 и mtc1 для перемещения между регистрами целых чисел и с плавающей запятой.

MARS не имеет каких-либо инструкций / псевдо-инструкций, которые загружают непосредственные значения с плавающей запятой в плавающие регистры. Вместо этого вам нужно поместить значение с плавающей запятой в память и загрузить регистр из памяти:

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

.text   
l.d $f0, fp1
l.d $f2, fp2
Другие вопросы по тегам