2012-05-03 4 views
0

Я хочу написать небольшую программу в SPIM, что вычислить длину окружности и считывает значение радиуса от пользователя ... и вот кодУмножить два поплавок регистрирует в SPIM

sw $s0, p2 
l.s $f6 ,p2 
li.s $f2 ,3.4 

mul.s $f8, $f2, $f6 

s0 является значением радиуса, который вводится форма пользователя р переменной с плавающей точкой в ​​секции .data

после выполнения программы у меня есть эти значения в регистрах f2, f6, f8 (при s0 = 3):

FP2 = 4059999a 
FP6 = 00000003 
FP8 = 0000000a 

- этот результат верен? и если верно, то почему значение в f8 10 не 10,2?

ответ

0

0000000a - это шестнадцатеричное представление числа с плавающей запятой. Это не означает «10», это означает 1.4e-44.

Проблема в том, что вы неправильно преобразовываете целое число в $ s0 в поплавок. Рассмотрим случай, когда $ s0 = 3. Ваш вызов «sw $ s0, p2» просто помещает бит 0x00000003 в ячейку памяти p2. Ваш вызов l.s «$ f6, p2» помещает те же биты в $ f6. Однако 0x00000003 не означает «3» в качестве числа с плавающей запятой, но 4.2x10-45.

Смежные вопросы