【问题标题】:Function for Square Root in MIPSMIPS 中的平方根函数
【发布时间】:2021-04-02 05:38:45
【问题描述】:

我是汇编语言 (MIPS) 的新手,正在尝试创建一个计算整数平方根的函数,但无法弄清楚它的逻辑。有人可以帮助或指导我如何正确编码。谢谢。

【问题讨论】:

  • 你卡在哪里了?

标签: mips


【解决方案1】:

下面是使用Newton’s Method计算整数平方根的代码:

.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

【讨论】:

    【解决方案2】:

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

    您可以使用它为您执行 sqrt 计算。

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

    如果您想使用双精度(可以表示完整的 32 位 int 而不会丢失精度) {on a 32 bit mips arc} 你应该只使用 EVEN 寄存器号 $f0,f2,f4 ... f30

    使用说明:{如果您使用浮点数(单精度),请使用命令的单词/单版本}

    • load-doubleword-coprocessor1: [ldc1 $f, base+offset] # {lwc1}

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

    • convert-word-from-double: [cvt.w.d $f, $f] # {cvt.w.s}

    • 从协处理器 1 移动:[mfc1.d $r, $f] # {mfc1.s}

    '# $r 表示通用寄存器,如$t0-8, $s0-8 等

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-25
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多