CaptainBiken 发表于 2023-8-1 16:45:28

求助安卓ARM系统中如何通过代码调用RNDR随机数指令

如题

sfqxx 发表于 2023-8-1 16:45:29

在ARM系统中,你可以通过内联汇编来调用RNDR指令。以下是一个简单的示例,用于在C语言中调用RNDR:#include <stdio.h>

int main() {
    unsigned int rnd = 0;
    asm volatile ("mrs %0, RNDR" : "=r" (rnd));
    printf("Random number: %u\n", rnd);
    return 0;
}在这个例子中,asm volatile关键字用于插入内联汇编代码。"mrs %0, RNDR"是执行的汇编指令,它将RNDR寄存器的值移动到一个寄存器中。"=r" (rnd)指定了一个输出操作数,rnd变量将被赋予这个寄存器的值。

然而,你需要注意的是,RNDR指令在ARMv8.5-A和以后的版本中才可用。并且,这个指令可能会因为权限问题而无法在所有执行环境中使用。例如,如果你在用户模式下运行这段代码,可能会因为权限不足而导致异常。

给个最佳答案呗,谢谢{:10_254:}

学习编程中的Ben 发表于 2023-8-1 16:54:17

很抱歉,但我不清楚你所说的"RNDR随机数指令"是指什么。在安卓ARM系统中,一般使用Java代码来调用随机数生成器,你可以使用java.util.Random类来生成伪随机数。
首先,在你的Java代码中,你需要导入java.util.Random类:
import java.util.Random;
然后,你可以创建一个Random对象,并使用其提供的方法来生成随机数。例如,要生成一个0到100之间的整数,可以这样写:
Random random = new Random();
int randomNumber = random.nextInt(101); // 生成0到100之间的随机整数
如果你需要生成其他类型的随机数,比如浮点数或长整数,Random类也提供了相应的方法,例如nextFloat()、nextDouble()和nextLong()。

请注意,虽然这种方法可以生成伪随机数,但并不是真正的随机数。如果你需要更强大的随机性,可以考虑使用安全的随机数生成器(SecureRandom)类。

学习编程中的Ben 发表于 2023-8-1 16:55:26

给个最佳答案呗{:10_254:}我要鱼币QAQ

sfqxx 发表于 2023-8-1 17:06:41

学习编程中的Ben 发表于 2023-8-1 16:55
给个最佳答案呗我要鱼币QAQ

《不清楚》

学习编程中的Ben 发表于 2023-8-1 17:11:47

sfqxx 发表于 2023-8-1 17:06
《不清楚》

{:10_256:}
页: [1]
查看完整版本: 求助安卓ARM系统中如何通过代码调用RNDR随机数指令