汇编语言ARM Cortex-A53中的随机数生成器 [英] random number generator in Assembly language ARM Cortex-A53
问题描述
所以我必须使用树莓派3和gpio组装组装骰子游戏.我已经建立了大部分,但我遇到的是随机数部分的范围部分.当用户按下按钮时,我需要数字介于1-6之间.我看过其他示例,但其中一个似乎可以帮助我.使用线性先天生成器似乎已成定局.
so i have to build a dice game in assembly using raspberry pi 3 and gpio. i have build most of it but what i am stuck is the range part of the the random number part. i need the number to fall between 1-6 when the user pushes the button. i have looked at other examples but one of them seem to help me. using linear congenital generator seems like over kill.
.text
.global main
main:
push {lr}
bl wiringPiSetup
push {lr}
bl rand // will get a random number and put it in r0
// some wher in here is were you need to do the math to make the number
// fall inbwtween 0- 5 +1 to the result
mov r1,r0 // will take r0 value and put it in to r1
ldr r0,=pattern // will take the vaule in patter and give it to r0
bl printf
pop {pc}
.data
pattern: .asciz "%d\n"
cmp r0, #1
//bleq moves you back to where you camefrom
beq roll1
cmp r0, #2
beq roll2
cmp r0, #3
beq roll3
cmp r0, #4
beq roll4
cmp r0, #5
beq roll5
cmp r0, #6
beq roll6
roll1:
// this is to tell the singal to go out
mov r0, #0 // this is writing to pin 17
mov r1, #0 // if it is a one you want power to go to it if not then enter 0
bl pinMode
// this is to tell the pins to power up
mov r0, #0
mov r1, #0
bl digitalWrite
roll2:
// this is to tell the singal to go out
mov r0, #0 // this is writing to pin 17
mov r1, #0 // if it is a one you want power to go to it if not then enter 0
bl pinMode
// this is to tell the pins to power up
mov r0, #0
mov r1, #0
bl digitalWrite
mov r0, #2 // this is writing to pin 27
mov r1, #0
bl pinMode
mov r0, #2
mov r1, #0
bl digitalWrite
roll3:
// this is to tell the singal to go out
mov r0, #0 // this is writing to pin 17
mov r1, #0 // if it is a one you want power to go to it if not then enter 0
bl pinMode
// this is to tell the pins to power up
mov r0, #0
mov r1, #0
bl digitalWrite
mov r0, #2 // this is writing to pin 27
mov r1, #0
bl pinMode
mov r0, #2
mov r1, #0
bl digitalWrite
mov r0, #3 // this is writing to pin 22
mov r1, #0
bl pinMode
mov r0, #3
mov r1, #0
bl digitalWrite
roll4:
// this is to tell the singal to go out
mov r0, #0 // this is writing to pin 17
mov r1, #0 // if it is a one you want power to go to it if not then enter 0
bl pinMode
// this is to tell the pins to power up
mov r0, #0
mov r1, #0
bl digitalWrite
mov r0, #2 // this is writing to pin 27
mov r1, #0
bl pinMode
mov r0, #2
mov r1, #0
bl digitalWrite
mov r0, #3 // this is writing to pin 22
mov r1, #0
bl pinMode
mov r0, #3
mov r1, #0
bl digitalWrite
mov r0, #21 // this is writing to pin 5
mov r1, #0
bl pinMode
mov r0, #21
mov r1, #0
bl digitalWrite
roll5:
// this is to tell the singal to go out
mov r0, #0 // this is writing to pin 17
mov r1, #0 // if it is a one you want power to go to it if not then enter 0
bl pinMode
// this is to tell the pins to power up
mov r0, #0
mov r1, #0
bl digitalWrite
mov r0, #2 // this is writing to pin 27
mov r1, #0
bl pinMode
mov r0, #2
mov r1, #0
bl digitalWrite
mov r0, #3 // this is writing to pin 22
mov r1, #0
bl pinMode
mov r0, #3
mov r1, #0
bl digitalWrite
mov r0, #21 // this is writing to pin 5
mov r1, #0
bl pinMode
mov r0, #21
mov r1, #0
bl digitalWrite
mov r0, #22 // this is wriritin to pin 6
mov r1, #0
bl pinMode
mov r0, #22
mov r1, #0
bl digitalWrite
roll6:
// this is to tell the singal to go out
mov r0, #0 // this is writing to pin 17
mov r1, #0 // if it is a one you want power to go to it if not then enter 0
bl pinMode
// this is to tell the pins to power up
mov r0, #0
mov r1, #0
bl digitalWrite
mov r0, #2 // this is writing to pin 27
mov r1, #0
bl pinMode
mov r0, #2
mov r1, #0
bl digitalWrite
mov r0, #3 // this is writing to pin 22
mov r1, #0
bl pinMode
mov r0, #3
mov r1, #0
bl digitalWrite
mov r0, #21 // this is writing to pin 5
mov r1, #0
bl pinMode
mov r0, #21
mov r1, #0
bl digitalWrite
mov r0, #22 // this is wriritin to pin 6
mov r1, #0
bl pinMode
mov r0, #22
mov r1, #0
bl digitalWrite
mov r0, #23 // this is writing to pin 13
mov r1, #0
bl pinMode
mov r0, #23
mov r1, #0
bl digitalWrite
button:
// these botton two leave them on at all times they are the power to use the button.
mov r0, #7
mov r1, #1
bl pinMode
mov r0, #7
mov r1, #1
bl digitalWrite
pop {pc}
// somewhere after pop or before add a deley so that all leds can be turned off
推荐答案
如果您希望使用syscall,一个想法是调用gettimeofday syscall,然后使用微秒的3个最高有效位来模拟掷骰子.您应该进行一些随机性测试,以确定它是否可能是合理的伪随机生成器.
If you wish to use syscalls, one idea is to call the gettimeofday syscall then use the 3 most significant bits of the microseconds to emulate a dice roll. You should do some randomness testing to determine if this could be a reasonable pseudo-random generator.
.bss
t: .zero // syscall storage
...
ldr r9,=t
...
mov r7, #78 // <syscall name="gettimeofday" number="78"/>
ldr r0,=t // pointer
mov r1, #0 //
svc #0
ldr r0,[r9,#1] // microseconds in second element
这篇关于汇编语言ARM Cortex-A53中的随机数生成器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!