⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 read_random.asl

📁 一款智能老鼠的玩具源代码
💻 ASL
字号:
+                     1 ;****************************************************************;
+                     2 ; Read Random Number
+                     3 ;
+                     4 ; function: generate a number between 0 and m_rnd_range
+                     5 ; variable: rnd_num_16+1, rnd_num_16 and m_rnd_range
+                     6 ;
+                     7 ; Written by: Mr.ZhangJinBo
+                     8 ; Date: 2004-02-16
+                     9 ;****************************************************************;
+                    10 ;****************************************************************;
+                    11 ;input:m_rnd_range(求的随机数范围),
+                    12 ;output:rnd_num(所求的随机数)
+                    13 ;****************************************************************;
+                    14 ;================================================================;
+                    15 ;Data Area
+                    16 ;================================================================;
+B 00 01

+                    17        .area    read_random_var(data)
+                    18        
0000                 19 temp_rnd::		.ds	2	;随机数高低位临时寄存器
0002                 20 rnd_num::		.ds	1	;计算出来的随机数
0003                 21 rnd_num_16::		.ds	2	;随机数高低位寄存器
0005                 22 m_rnd_range::		.ds	1	;要求的随机数范围
+                    23 
+                    24 ;================================================================;
+                    25 ;Code Area
+                    26 ;================================================================;
+B 00 02

+                    27        .area    read_random_code(code)
+                    28        
0000                 29 read_random::
+                    30 ;-----------------------------------当随机范围是0,输出的随机数也是0(这样的速度快)
0000 F1 05           31 	lda	m_rnd_range		;/*04-02-18*/当键按下时九是这状态
0002 A7 00           32 	cmpe	#0
0004 07 00 0E        33 	brnz	generate_random		;/*04-02-18*/
0007 F3 00           34 	lda	#0
0009 FD 02           35 	sta	rnd_num
000B 02 00 33        36 	br	end_read_random		;/*04-02-18*/
+                    37 ;---------------------------------------
000E                 38 generate_random::
000E 20 00 34        39 	call	random_generate		;把本体随机数移一遍
0011 F1 03           40 	lda	rnd_num_16		;送到临时寄存器
0013 FD 00           41 	sta	temp_rnd		;this variable is used temporarily
0015 F1 04           42 	lda	rnd_num_16+1		;
0017 FD 01           43 	sta	temp_rnd+1
0019                 44 begin_multiply:
+                    45 	;adda	#0			;clear 'C'
0019 F1 00           46 	lda	temp_rnd		;
001B 89 03           47 	adda	rnd_num_16
001D FD 00           48 	sta	temp_rnd
001F F1 01           49 	lda	temp_rnd+1		;
0021 99 04           50 	addc	rnd_num_16+1
0023 FD 01           51 	sta	temp_rnd+1
0025 F1 02           52 	lda	rnd_num			;
0027 9B 00           53 	addc	#00
0029 FD 02           54 	sta	rnd_num
002B F1 05           55 	lda	m_rnd_range		;decrease the times of cycle
002D 3F              56 	deca
002E FD 05           57 	sta	m_rnd_range
+                    58 	;cmpe	#0
0030 07 00 19        59 	brnz	begin_multiply		;the result of multiplication divides #0ffh,
+                    60 					;the final result approximates to rnd_num 
0033                 61 end_read_random:
0033 24              62 	ret
+                    63 ;----------------------------------------------------------------;
+                    64 ; 16bit random number generate Subroutine(把随机数移一遍)
+                    65 ;----------------------------------------------------------------;
0034                 66 random_generate::
0034 F3 20           67 	lda	#00100000b
0036 C9 04           68 	anda	rnd_num_16+1		;select the bit5 of rnd_num_16(16bit random number high 8bit)
0038 06 00 42        69 	brz	1$
003B F3 01           70 	lda	#1			;bit2=1
003D FD 00           71 	sta	temp_rnd		;.ds	1
003F 02 00 46        72 	br	2$
+                    73 1$:					;bit2=0
0042 F3 00           74 	lda	#0
0044 FD 00           75 	sta	temp_rnd
+                    76 2$:
0046 F3 10           77 	lda	#00010000b		;select the bit4 of rnd_num_16(16bit random number high 8bit)
0048 C9 04           78 	anda	rnd_num_16+1
004A 06 00 56        79 	brz	3$
004D F3 01           80 	lda	#1			;bit3=1
004F E9 00           81 	xora	temp_rnd
0051 FD 00           82 	sta	temp_rnd
0053 02 00 5C        83 	br	4$
+                    84 3$:
0056 F3 00           85 	lda	#0			;bit3=0
0058 E9 00           86 	xora	temp_rnd
005A FD 00           87 	sta	temp_rnd
+                    88 4$:
005C F3 08           89 	lda	#00001000b		;select the bit3 of rnd_num_16(16bit random number high 8bit)
005E C9 04           90 	anda	rnd_num_16+1
0060 06 00 6C        91 	brz	5$
0063 F3 01           92 	lda	#1			;bit4=1
0065 E9 00           93 	xora	temp_rnd
0067 FD 00           94 	sta	temp_rnd
0069 02 00 72        95 	br	6$
+                    96 5$:
006C F3 00           97 	lda	#0			;bit4=0
006E E9 00           98 	xora	temp_rnd
0070 FD 00           99 	sta	temp_rnd
0072 F3 01          100 6$:	lda	#00000001b		;select the bit0 of rnd_num_16+1(16bit random number low 8bit)
0074 C9 03          101 	anda	rnd_num_16
0076 06 00 82       102 	brz	7$
0079 F3 01          103 	lda	#1			;bit15=1
007B E9 00          104 	xora	temp_rnd
007D FD 00          105 	sta	temp_rnd
007F 02 00 88       106 	br	8$
+                   107 7$:
0082 F3 00          108 	lda	#0			;bit15=0
0084 E9 00          109 	xora	temp_rnd
0086 FD 00          110 	sta	temp_rnd
+                   111 8$:
0088 06 00 94       112 	brz	9$
008B F3 01          113 	lda	#00000001b
008D D8 22          114 	ora	r_op1			;change the state of 'C'
008F FC 22          115 	sta	r_op1
0091 02 00 9A       116 	br	10$
+                   117 9$:
0094 F3 FE          118 	lda	#11111110b
0096 C8 22          119 	anda	r_op1
0098 FC 22          120 	sta	r_op1
+                   121 10$:					;rotate right with C
009A F1 04          122 	lda	rnd_num_16+1
009C 7F             123 	rorc
009D FD 04          124 	sta	rnd_num_16+1
009F F1 03          125 	lda	rnd_num_16
00A1 7F             126 	rorc
00A2 FD 03          127 	sta	rnd_num_16
00A4 24             128 	ret
+                   129 ;================================================================;
+                   130 
+
+Symbol Table
+
+  2 begin_multiply                     0019 R
+  2 end_read_random                    0033 R
+  2 generate_random                    000E GR
+  1 m_rnd_range                        0005 GR
+  2 random_generate                    0034 GR
+  2 read_random                        0000 GR
+  1 rnd_num                            0002 GR
+  1 rnd_num_16                         0003 GR
+  1 temp_rnd                           0000 GR
+
+
+Area Table
+
+   0 .                                  size    0   flags 0
+   1 read_random_var                    size    6   flags 2
+   2 read_random_code                   size   A5   flags 1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -