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

📄 random.s

📁 基于S3C2410的汇编与C语言相互调用例程 学习汇编的下载
💻 S
字号:
;#*********************************************************************************************
;# File:	random.s                                                                         *
;# Author:	Wuhan R&D Center, embest                                                                           *
;# Desc:	Random number generator                                                          *
;#           This uses a 33-bit feedback shift register to generate a pseudo-randomly         *
;#           ordered sequence of numbers which repeats in a cycle of length 2^33 - 1          *
;#           NOTE: randomseed should not be set to 0, otherwise a zero will be generated      *
;#                 continuously (not particularly random!).                                   *
;#           This is a good application of direct ARM assembler, because the 33-bit           *
;#           shift register can be implemented using RRX (which uses reg + carry).            *
;#           An ANSI C version would be less efficient as the compiler would not use RRX.     *
;#           AREA    |Random$$code|, CODE, READONLY                                           *       
;# History:																					 *
;#*********************************************************************************************

;/*------------------------------------------------------------------------------------------*/
;/*	 								global symbol define						 			*/
;/*------------------------------------------------------------------------------------------*/
	global randomnumber
	global seed
	
;/*------------------------------------------------------------------------------------------*/
;/*	 								code								 				    */
;/*------------------------------------------------------------------------------------------*/	
	AREA BLOCK, code , readonly	

	EXPORT randomnumber
randomnumber
;#  on exit:
;#  a1 = low 32-bits of pseudo-random number
;#  a2 = high bit (if you want to know it)
	ldr     ip, seedpointer
	ldmia   ip, {a1, a2}
	tst     a2, a2, lsr #1          ;/* to bit into carry	*/
	movs    a3, a1, rrx             ;/* 33-bit rotate right  */
	adc     a2, a2, a2               ;/* carry into LSB of a2 */
	eor     a3, a3, a1, lsl #12      ;/* (involved!)          */
	eor     a1, a3, a3, lsr #20      ;/* (similarly involved!)*/
	stmia   ip, {a1, a2}
	BX lr        


seedpointer
	DCD    seed

seed
	DCD    0x55555555
	DCD	   0x55555555

	END

⌨️ 快捷键说明

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