Мне действительно трудно понять, как подойти к этой проблеме. Я понимаю, что хочу взять двоичное представление как целого числа, так и дроби, объединить их для получения мантиссы и присвоить знаковый бит началу, но я не знаю, как на самом деле реализовать это в MIPS.
Может ли кто-нибудь помочь мне хотя бы начать?
Предположим, что ваше оборудование MIPS не имеет регистров с плавающей запятой и ALU с плавающей запятой. Если вы хотите выполнить сложение с плавающей запятой, вам придется использовать целочисленные инструкции MIPS, которые используют целочисленные регистры ($0 - $31) и целочисленное ALU для выполнения работы. В этом задании вы будете писать код MIPS, используя только целочисленные инструкции и целочисленные регистры, для реализации процедуры сложения двух чисел с плавающей запятой и написания основной функции для вызова процедуры.
Напишите процедуру MIPS toFloat для перевода числа с плавающей запятой в формат одинарной точности IEEE. В качестве входных данных процедура принимает три целых числа: $a0, $a1, $a2, которые представляют число с плавающей запятой следующим образом: если $a0 содержит 0, число с плавающей запятой положительно, иначе, если $a0 содержит 1, число с плавающей запятой отрицательное. Число, хранящееся в регистре $a1, представляет собой целую часть числа с плавающей запятой, а число, хранящееся в регистре $a2, представляет собой дробную часть числа с плавающей запятой. Например, чтобы представить число с плавающей запятой -5,25, три входных регистра должны содержать следующие числа: $a0 = 1, $a1 = 5 и $a2 = 25. Для дробной части вы можете использовать div rt инструкция для деления 25 на 100. Дробь будет храниться в регистре HI, и вы можете использовать команду mfhi для извлечения дроби. Процедура вернет v0, который содержит шаблон одинарной точности IEEE, соответствующий числу с плавающей запятой, представленному тремя входными числами. Когда у вас есть эта процедура, вы можете использовать ее для преобразования входных чисел 2.5 и 7.5 в их формат одинарной точности IEEE.
Напишите процедуру MIPS printFloat для печати числа в формате одинарной точности IEEE. Ввод процедуры находится в $a0, который является числом в формате одинарной точности IEEE. Процедура просто напечатает битовую комбинацию, хранящуюся в $a0. Вы можете использовать цикл для печати каждого бита. Если у вас есть эта процедура, вы можете использовать ее для печати входных чисел 2,5 и 7,5 в их формате с плавающей запятой.
- #P6#
#P7# #P8# #P9# #P10#
Вот код, который у меня есть на данный момент: