Assembly 如何使用浮点检查条件?

Assembly 如何使用浮点检查条件?,assembly,mips,Assembly,Mips,我想创建一个循环,使这个程序只接受5到20之间的值。我尝试过使用blt,但它说$f0无效 li $v0,4 la $a0,improvement syscall li $v0,6 syscall l.s $f6, zero blt $f0,$f6, failure failure: li $v0,4 la $a0,error syscall l

我想创建一个循环,使这个程序只接受5到20之间的值。我尝试过使用blt,但它说$f0无效

   li $v0,4            
   la $a0,improvement
   syscall

   li $v0,6             
   syscall
   l.s $f6, zero
   blt $f0,$f6, failure 



 failure:
   li $v0,4            
   la $a0,error
   syscall

   li $v0,6             
   syscall

mov.s $f4,$f0

因此,基本上,程序读取一个浮点值,我希望它检查它是否小于0或大于20,如果是,则转到failure函数并请求一个不同的值。一旦完成,将$f0中的值移动到$f4

,正如Alain在评论中指出的那样。c、 xx.s

unsigned int dofc ( float x, float y )
{
    if(x<y) return(1);
    return(0);
}

00000000 <dofc>:
   0:   460e603c    c.lt.s  $f12,$f14
   4:   00000000    nop
   8:   45010002    bc1t    14 <dofc+0x14>
   c:   24020001    li  $2,1
  10:   00001025    move    $2,$0
  14:   03e00008    jr  $31
  18:   00000000    nop
无符号整数dofc(浮点x,浮点y)
{

如果(xFP比较在mips中与
c.xx.s fa、fb
进行,其中
xx
可以是
eq
lt
le
。它根据条件位(t或f)的状态设置条件位和
bclt标签
bclf标签
分支。请注意,由于舍入错误,与FP进行相等比较可能会导致意外行为。请注意,这适用于具有分支延迟槽的真实MIPS。默认情况下,MARS模拟没有分支延迟槽的MIPS,因此您希望在分支之前将
$v0
设置为
1