Умножить два регистра с плавающей запятой в spim

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

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

mul.s $f8, $f2, $f6

s0 — это значение радиуса, введенное пользователем из переменной p float в разделе .data.

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

FP2 = 4059999a
FP6 = 00000003
FP8 = 0000000a

такой результат верный? и если правда то почему значение в f8 10 а не 10.2 ?


person Nawar Akkash    schedule 03.05.2012    source источник


Ответы (1)


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

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

person Zack    schedule 16.10.2012