【问题标题】:How to perform square root on a number in ARM assembly如何在ARM汇编中对数字执行平方根
【发布时间】:2021-12-20 18:48:17
【问题描述】:

您好,我是 ARM 程序集的新手,想知道如何对数字求平方根。

我目前正在使用树莓派来编写和编译我的代码

例如:

.data

s1: .word 20

.text
.global main

main:
    LDR R1,=s1
    LDR R1,[R1]
    //How do I sqroot R1 from here?

【问题讨论】:

  • 首先你需要决定是要整数还是浮点结果。
  • 您好,感谢您的回复。浮点结果是我正在寻找的最终结果。

标签: assembly arm raspberry-pi4


【解决方案1】:

对于这种情况,最简单的方法是向 C 编译器寻求帮助。鉴于此 C 代码:

#include <math.h>

unsigned int mysqrt(unsigned int x) {
    return sqrt(x);
}

编译器产生(稍微清理一下):

mysqrt:
    vmov          s0, r0    @ move x to FP register
    vcvt.f64.u32  d16, s0   @ convert from int to double
    vsqrt.f64     d16, d16  @ compute square root
    vcvt.u32.f64  s0, d16   @ convert back to integer
    vmov          r0, s0    @ move back to general purpose register
    bx            lr

所以这也是你应该做的。如果数字最初在 RAM 中,您可以直接将其加载到 FP 寄存器中,如下所示:

    ldr           r0, =s1
    vldr          s0, [r1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2013-07-25
    • 1970-01-01
    相关资源
    最近更新 更多