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

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

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

li $5,100

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

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

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

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

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

Ответы [ 2 ]

16 голосов
/ 16 октября 2012

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

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

.text   
l.d $f0, fp1
l.d $f2, fp2
8 голосов
/ 07 апреля 2010

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

Вместо:

li $5,2.5

Попробуйте:

li.s $f5,2.5

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

...