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

📄 read_random.asm

📁 一款智能老鼠的玩具源代码
💻 ASM
字号:
;****************************************************************;
; Read Random Number
;
; function: generate a number between 0 and m_rnd_range
; variable: rnd_num_16+1, rnd_num_16 and m_rnd_range
;
; Written by: Mr.ZhangJinBo
; Date: 2004-02-16
;****************************************************************;
;****************************************************************;
;input:m_rnd_range(求的随机数范围),
;output:rnd_num(所求的随机数)
;****************************************************************;
;================================================================;
;Data Area
;================================================================;
       .area    read_random_var(data)
       
temp_rnd::		.ds	2	;随机数高低位临时寄存器
rnd_num::		.ds	1	;计算出来的随机数
rnd_num_16::		.ds	2	;随机数高低位寄存器
m_rnd_range::		.ds	1	;要求的随机数范围

;================================================================;
;Code Area
;================================================================;
       .area    read_random_code(code)
       
read_random::
;-----------------------------------当随机范围是0,输出的随机数也是0(这样的速度快)
	lda	m_rnd_range		;/*04-02-18*/当键按下时九是这状态
	cmpe	#0
	brnz	generate_random		;/*04-02-18*/
	lda	#0
	sta	rnd_num
	br	end_read_random		;/*04-02-18*/
;---------------------------------------
generate_random::
	call	random_generate		;把本体随机数移一遍
	lda	rnd_num_16		;送到临时寄存器
	sta	temp_rnd		;this variable is used temporarily
	lda	rnd_num_16+1		;
	sta	temp_rnd+1
begin_multiply:
	;adda	#0			;clear 'C'
	lda	temp_rnd		;
	adda	rnd_num_16
	sta	temp_rnd
	lda	temp_rnd+1		;
	addc	rnd_num_16+1
	sta	temp_rnd+1
	lda	rnd_num			;
	addc	#00
	sta	rnd_num
	lda	m_rnd_range		;decrease the times of cycle
	deca
	sta	m_rnd_range
	;cmpe	#0
	brnz	begin_multiply		;the result of multiplication divides #0ffh,
					;the final result approximates to rnd_num 
end_read_random:
	ret
;----------------------------------------------------------------;
; 16bit random number generate Subroutine(把随机数移一遍)
;----------------------------------------------------------------;
random_generate::
	lda	#00100000b
	anda	rnd_num_16+1		;select the bit5 of rnd_num_16(16bit random number high 8bit)
	brz	1$
	lda	#1			;bit2=1
	sta	temp_rnd		;.ds	1
	br	2$
1$:					;bit2=0
	lda	#0
	sta	temp_rnd
2$:
	lda	#00010000b		;select the bit4 of rnd_num_16(16bit random number high 8bit)
	anda	rnd_num_16+1
	brz	3$
	lda	#1			;bit3=1
	xora	temp_rnd
	sta	temp_rnd
	br	4$
3$:
	lda	#0			;bit3=0
	xora	temp_rnd
	sta	temp_rnd
4$:
	lda	#00001000b		;select the bit3 of rnd_num_16(16bit random number high 8bit)
	anda	rnd_num_16+1
	brz	5$
	lda	#1			;bit4=1
	xora	temp_rnd
	sta	temp_rnd
	br	6$
5$:
	lda	#0			;bit4=0
	xora	temp_rnd
	sta	temp_rnd
6$:	lda	#00000001b		;select the bit0 of rnd_num_16+1(16bit random number low 8bit)
	anda	rnd_num_16
	brz	7$
	lda	#1			;bit15=1
	xora	temp_rnd
	sta	temp_rnd
	br	8$
7$:
	lda	#0			;bit15=0
	xora	temp_rnd
	sta	temp_rnd
8$:
	brz	9$
	lda	#00000001b
	ora	r_op1			;change the state of 'C'
	sta	r_op1
	br	10$
9$:
	lda	#11111110b
	anda	r_op1
	sta	r_op1
10$:					;rotate right with C
	lda	rnd_num_16+1
	rorc
	sta	rnd_num_16+1
	lda	rnd_num_16
	rorc
	sta	rnd_num_16
	ret
;================================================================;

⌨️ 快捷键说明

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