Assembly 如何使用浮点检查条件?
我想创建一个循环,使这个程序只接受5到20之间的值。我尝试过使用blt,但它说$f0无效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
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
。