如何在MIPS中查看浮点除法中的余数?

问题描述 投票:0回答:1

我正在尝试在 MIPS 中除以 2(我正在使用 PCSPIM)。 基本上我在寄存器($f0)中有一个数字,已加载。 经过一些操作后,我想将这个数字除以 2,并检查此操作是否有休息(例如,从 50 开始,我不希望休息,但从 23 开始休息,是的)。 我不知道如何进行划分并检查其余部分。 目前,该代码仅在数字类似于 2 到 3 之间的数字时才起作用。例如,如果输入是 5,则它将无法正常工作。

”。

我留下代码(抱歉有一些意大利评论,我希望可以理解)。

    .data
memoria: .space 1000
numero: .float 5.00
numero1: .float 1.00
numero2: .float 2.00
    .text

main:
    l.s $f0, numero
    l.s $f1, numero1
    la $s0, memoria

CICLO:
    addiu $sp, $sp, -4
    swc1 $f0, 0 ($sp)
    jal CHECKNUMEROPARI             #NUMBER IS EVEN?
    lwc1 $f0, 0($sp)
    addiu $sp, $sp, 4
CHECKNUMEROPARI:        #I HAVE TO CHECK THE DIVISION. IF NO REST, IS EVEN.
    #########HERE THERE IS THE PROBLEM###############

        l.s $f2, numero2
    div.s $f0, $f0, $f2
    c.eq.s $f0, $f1
    bc1t PARI       #SO IS EVEN
    #ALLORA è DISPARI   
    l.s $f3, numero1    #LIKE SO IN F3 I WILL HAVE A NUMBER THAT WILL LET ME KNOW THAT I HAVE A ODD NUMBER
    jr $ra


PARI:
    l.s $f3, numero2    #IN F3 I WILL HAVE A NUMBER THAT WILL LET ME KNOW THAT I HAVE A EVEN NUMBER
    jr $ra
    

我尝试将数字转换为整数,但它不起作用(否则我不喜欢转换它的概念)。

floating-point mips division
1个回答
0
投票

从技术上讲,您可以检查指数字段和尾数。指数字段告知有多少位是整数,其余的(如果非零)是分形的。但这并不容易做到。它需要anding,shift,只能在整数寄存器中完成,但这并不意味着转换为整数,只是移动它而不转换来执行它。

对于浮点数,指数表示 2 的幂,因此除以 2 意味着指数减去 1,因此不会改变尾数。


仅转换为整数不足以告诉我们任何信息。

因此,或者,转换为整数,然后返回浮点数,并将原始浮点数与新浮点数进行比较。如果它们相同,那么它就是一个整数,如果不同,它会丢失一个分数,所以不是一个整数。

© www.soinside.com 2019 - 2024. All rights reserved.