我正在尝试在 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
我尝试将数字转换为整数,但它不起作用(否则我不喜欢转换它的概念)。
从技术上讲,您可以检查指数字段和尾数。指数字段告知有多少位是整数,其余的(如果非零)是分形的。但这并不容易做到。它需要anding,shift,只能在整数寄存器中完成,但这并不意味着转换为整数,只是移动它而不转换来执行它。
对于浮点数,指数表示 2 的幂,因此除以 2 意味着指数减去 1,因此不会改变尾数。
仅转换为整数不足以告诉我们任何信息。
因此,或者,转换为整数,然后返回浮点数,并将原始浮点数与新浮点数进行比较。如果它们相同,那么它就是一个整数,如果不同,它会丢失一个分数,所以不是一个整数。