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

📄 fft.s

📁 c语言+ARM汇编用快速傅立叶变换实现图像压缩。FFT部分用ARM汇编实现
💻 S
字号:
	AREA fft_fun,CODE,READONLY
N	equ		128
N1	equ		7
sf	equ		30
	import	getsin
	import	getcos
	export 	fft1
	export	ar1
	export	ai1
row	equ		128
col	equ		128
fft1
    STMFD sp!,{R0-R12,R14}
    str     r1,ar1
    str     r2,ai1
	mov		R3,	#N					;R3=a
	mov		R0,	#1					;R0=c
loopA		
	cmp		R0,	#7			
	bgt		loopAend	
	mov		R3,	R3,	lsr #1			;a/=2
	
	mov		R1,	#0					;R1=f
loopA1
	cmp		R1,	R3
	bge		loopA1end
	stmfd	sp!,	{R0-R11,LR} 	;R1-R11不改变,R12为返回值
	bl		getsin
	ldmfd	sp!,	{R0-R11,LR} 	;R1-R11不改变,R12为返回值
	str		R12,	si				;si赋值
	stmfd	sp!,	{R0-R11,LR}
	bl		getcos			
	ldmfd	sp!,	{R0-R11,LR}
	str		R12,	co				;co赋值
	
	mov		R2,	R3,	lsl #1			;R2=g

loopA1a
	cmp		R2,	#N
	bgt		loopA1aend
	sub		R4,	R2,	R3,	lsl #1		;R4=h
	add		R4,	R4,	R1
	add		R5,	R4,	R3				;R5=j
	
	ldr		R6,	ar1			
	ldr		R7,	[R6,R4,lsl #2]		;R7=*(ar+h)
	ldr		R8,	[R6,R5,lsl #2]		;R8=*(ar+j)
	sub		R9,	R7,	R8				
	str		R9,	k					;R9=k
	add		R9,	R7,	R8
	str		R9,	[R6,R4,lsl #2]
	
	ldr		R6,	ai1
	ldr		R7,	[R6,R4,lsl #2]		;R7=*(ai+h)
	ldr		R8,	[R6,R5,lsl #2]		;R8=*(ai+j)
	sub		R9,	R7,	R8				
	str		R9,	i					;R9=i
	add		R9,	R7,	R8
	str		R9,	[R6,R4,lsl #2]
		
	ldr		R6,	co
	ldr		R7,	k
	smull	R8,	R9,	R6,	R7
	ldr		R6,	si
	ldr		R7,	i
	smlal	R8,	R9,	R6,	R7
	ldr		R6,	ar1
	mov		R9,	R9,	lsl #32-sf			;缩放
	orr		R9,	R9,	R8,	lsr #sf			;缩放
	str		R9,	[R6,R5,lsl #2]

	ldr		R6,	co
	ldr		R7,	i
	smull	R8,	R9,	R6,	R7
	ldr		R6,	si
	ldr		R7,	k
	smull	R10,R11,R6,	R7			
	sbc		R8,	R8,	R10
	sub		R9,	R9,	R11
	ldr		R6,	ai1
	mov		R9,	R9,	lsl #32-sf			;缩放
	orr		R9,	R9,	R8,	lsr #sf			;缩放
	str		R9,	[R6,R5,lsl #2]

	add		R2,	R2,	R3,	lsl #1
	b		loopA1a
;	cmp		R2,	#N
;	ble		loopA1a
loopA1aend
	add		R1,	R1,	#1
	b		loopA1
loopA1end
	add		R0,	R0,	#1
	b		loopA
loopAend	

	mov		R0,	#0			;R0=m
	mov		R1,	#N/2		;R1=p
	ldr		R2,	=N-1		;R2=q
	mov		R3,	#0			;R3=r
loopB
	cmp		R3,	R2
	bge		loopBend
	cmp		R3,	R0
	bge		local1
	ldr		R4,	ar1
	ldr		R5,	[R4,R3,lsl #2]
	ldr		R6,	[R4,R0,lsl #2]
	str		R5,	[R4,R0,lsl #2]
	str		R6,	[R4,R3,lsl #2]
	ldr		R4,	ai1
	ldr		R5,	[R4,R3,lsl #2]
	ldr		R6,	[R4,R0,lsl #2]
	str		R5,	[R4,R0,lsl #2]
	str		R6,	[R4,R3,lsl #2]
local1
	mov		R4,	R1				;R4=s
loopB1
	cmp		R4,	R0
	bgt		loopB1end
	sub		R0,	R0,	R4
	mov		R4,	R4,	lsr #1
	b		loopB1
loopB1end
	add		R0,	R0,	R4
	add		R3,	R3,	#1
	b		loopB
loopBend
;;;;;;;;;??????????????
	nop
;;;;;;;;;;;;;;;??????????????
	
stop
    LDMFD sp!,{R0-R12,pc}
ar1 %   4
ai1 %   4
k	%	4
i	%	4
co	%	4
si	%	4
	END
	

⌨️ 快捷键说明

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