易码技术论坛

 找回密码
 加入易码
搜索
查看: 298626|回复: 10

[分享]8位单片机生成随机数的汇编代码

[复制链接]
发表于 2005-1-26 18:23:00 | 显示全部楼层
呵呵,这个确实简单,但有时候用随即数时不仅需要随即,
而且要求有唯一性.就是对同一个种子得到同一个随机数列~
发表于 2005-1-26 18:26:00 | 显示全部楼层
上面那个并不一定能得到随机数。

(注意是“不一定”,也就是有时可以,有时不可以)

大多数情况下得到的是一组有规律的数。

[此贴子已经被作者于2005-1-26 18:27:27编辑过]

发表于 2005-1-29 16:58:00 | 显示全部楼层
QIQI能不能讲一下你那个的原理啊?看不懂滴说……还有是什么机型啊?
发表于 2005-1-29 17:08:00 | 显示全部楼层
他贴出来的那个实际上是sun当初写在WQXNet上的,不过sun当时写那个程序之后是有附带限制条件的。而没有那个条件就不一定能取随机数了。

原理很简单,就是取Timer。

[此贴子已经被作者于2005-1-29 17:08:51编辑过]

发表于 2005-1-29 17:18:00 | 显示全部楼层
我的问题被QIQI无视了……去Timer的话……能不能说的更具体点?
发表于 2005-1-30 00:35:00 | 显示全部楼层
以下是引用QIQI在2005-1-27 13:29:05的发言:


绝大多数情况下得到的是无规律数。

取TIMER我也取了,是指需要根据取到的不同值进行不同的运算吧,但这样已够了。


这样是不够的(当然也并不是指“根据取到的不同值进行不同的运算”)。
要注意,在程序中连续取数手动取数是不一样的。
你可以写一段程序,连续地取出一系列数,对照一下,即可发现结果。

[此贴子已经被作者于2005-1-30 0:38:00编辑过]

发表于 2005-1-30 16:25:00 | 显示全部楼层
我的问题完全被无视了~是什么机型都行的么?还有为什么取TIMER就可以读随机数啊……
 楼主| 发表于 2005-1-30 18:23:00 | 显示全部楼层
以下是引用混乱羽翼在2005-1-30 16:25:56的发言:

我的问题完全被无视了~是什么机型都行的么?还有为什么取TIMER就可以读随机数啊……


我就知道

lda #$04

sta $3e

lda $3f

这样实现的就相当于GVmaker中的Getms,所以这个数是有一定随机性的.(如果你执行该代码的时间是无规律的话)

sinolqzh 该用户已被删除
发表于 2005-3-27 00:18:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
sinolqzh 该用户已被删除
发表于 2005-3-27 00:19:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2005-1-26 12:58:43 | 显示全部楼层 |阅读模式
    holdrand equ 27h
     
    srand:
     mov holdrand+03h,r7
     mov holdrand+02h,r6
     mov holdrand+01h,r5
     mov holdrand,r4
     ret
     
    rand:
     mov r7, #0fdh
     mov r6, #043h
     mov r5, #03h
     mov r4, #00h
     mov r3, holdrand+3
     mov r2, holdrand+2
     mov r1, holdrand+1
     mov r0, holdrand
     lcall ululmul
     mov a, r7
     add a, #0c3h
     mov r7, a
     mov a, r6
     addc a, #09eh
     mov r6, a
     mov a, r5
     addc a, #026h
     mov r5, a
     clr a
     addc a, r4
     mov r4, a
     mov holdrand+3, r7
     mov holdrand+2, r6
     mov holdrand+1, r5
     mov holdrand, a
     mov r0, #018h
     lcall ulshr
     ret
     

     
    ululmul:
     mov a, r0
     mov b, r7
     mul ab
     xch a, r4
     mov b, r3
     mul ab
     add a, r4
     mov r4, a
     mov a, r1
     mov b, r6
     mul ab
     add a, r4
     mov r4, a
     mov b, r2
     mov a, r5
     mul ab
     add a, r4
     mov r4, a
     mov a, r2
     mov b, r6
     mul ab
     xch a, r5
     mov r0, b
     mov b, r3
     mul ab
     add a, r5
     xch a, r4
     addc a, r0
     add a, b
     mov r5,a
     mov a, r1
     mov b, r7
     mul ab
     add a, r4
     xch a, r5
     addc a, b
     mov r4, a
     mov a, r3
     mov b, r6
     mul ab
     mov r6, a
     mov r1, b
     mov a, r3
     mov b, r7
     mul ab
     xch a, r7
     xch a, b
     add a, r6
     xch a, r5
     addc a, r1
     mov r6, a
     clr a
     addc a, r4
     mov r4, a
     mov a, r2
     mul ab
     add a, r5
     xch a, r6
     addc a, b
     mov r5, a
     clr a
     addc a, r4
     mov r4, a
     ret
     
    ulshr:
     mov a, r0
     jz ulshr_out
    ulshr_loop:
     mov a, r4
     clr c
     rrc a
     mov r4, a
     mov a, r5
     rrc a
     mov r5, a
     mov a, r6
     rrc a
     mov r6, a
     mov a, r7
     rrc a
     mov r7, a
     djnz r0, ulshr_loop
    ulshr_out:
     ret
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-20 17:41 , Processed in 0.010262 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表