MIPS中的平方根函数

MIPS中的平方根函数,mips,Mips,我是汇编语言(MIPS)的新手,曾试图创建一个计算整数平方根的函数,但无法理解其逻辑。有人能帮助或指导我如何正确地编码吗。谢谢。下面是使用以下公式计算整数平方根的代码: 如果您使用的版本支持协处理器1-浮点 您可以使用它来执行sqrt计算 $f表示有效的浮点寄存器。 这可能是$f0-f31 如果您希望使用双精度(可以表示一个完整的32位整数,而不会丢失精度) {在32位mips arc上}您应该只使用偶数寄存器号$f0、f2、f4。。。f30 使用以下说明:{如果使用浮点(单精度),请使用wor

我是汇编语言(MIPS)的新手,曾试图创建一个计算整数平方根的函数,但无法理解其逻辑。有人能帮助或指导我如何正确地编码吗。谢谢。

下面是使用以下公式计算整数平方根的代码:


如果您使用的版本支持协处理器1-浮点

您可以使用它来执行sqrt计算

$f表示有效的浮点寄存器。 这可能是$f0-f31

如果您希望使用双精度(可以表示一个完整的32位整数,而不会丢失精度) {在32位mips arc上}您应该只使用偶数寄存器号$f0、f2、f4。。。f30

使用以下说明:{如果使用浮点(单精度),请使用word/single版本的命令}

  • load-doubleword-协处理器1:[ldc1$f,基+偏移量]#{lwc1}

  • 平方根双:[sqrt.d$f,$f]#{sqrt.s}

  • 将单词从双精度转换为:[cvt.w.d$f,$f]#{cvt.w.s}

  • move-from-协处理器1:[mfc1.d$r,$f]#{mfc1.s}


“#$r表示普通寄存器,如$t0-8、$s0-8 ect

您卡在哪里?
.globl Squareroot # Function for Squareroot
.ent Squareroot
Squareroot:
#Using Newton’s Method
move $v0, $a0 # $v0 = x = N
li $t6, 0 # counter
Loop:
div $t7, $a0, $v0 # N/x
add $v0, $t7, $v0 # x + N/x
div $v0, $v0, 2 # (x + N/x)/2
add $t6, $t6, 1
blt $t6, 20, Loop
jr $ra
.end Squareroot