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

📄 5-4.asm

📁 《DSP嵌入式系统开发典型案例》此书的源代码
💻 ASM
字号:
				.mmregs
				.ref		start
				.data
				.bss		speechin,1024,0,0		; 为变量speechin申请1024个空间
				.bss		speechsave,1024,0,0		; 为变量speechsave申请1024个空间
				.bss		speechout,1024,0,0		; 为变量speechout申请1024个空间
				.text
start:				LD 		#1023,A				; A为speechin数据的个数
				STM		speechin,AR3			; AR3指向speechin的首地址
loop:				STL		A,*AR3+				; 初始化speechin的内容为1~1024
				SUB    	#1,A
				BC		loop,ANEQ
				NOP				
				STM		1D02h,AR7			; 初始化AR7寄存器
				STM		#1023,*AR7
				STM		speechin,AR3
				STM		speechsave,AR4			; AR4指向speechsave的首地址
loop1:
				STM    	0,AR2
				BIT		*AR3,15-9
				RSBX   	OVM				; 判断数据的正负
				NOP
				BC		positive,NTC			; 正数直接通过,直接到positive
				STM		#1,AR2				; 负数做符号处理
				NEG    	A
				LD 		#1FFh,B				; 1FFh=10232/2的取整
				AND   	B,A
				STL		A,*AR3
positive:			BIT		*AR3,15-8			; 测试第8位
				NOP
				NOP
				BC 		next1,NTC
				LD 		#0F0h,B				; 0F0h=1FFh/2的取整
				LD		*AR3,A
				AND    	B,A
				ST 		7,*AR4
				B 		cmpssover
next1:			BIT		*AR3,15-7			; 测试第7位
				NOP
				NOP
				BC 		next2,NTC
				LD 		#78h,B				; 78h=0F0/2的取整
				AND    	B,A
				RSBX   	C
				ROL    	A
				ST 		6,*AR4
				B 		cmpssover
next2:			BIT		*AR3,15-6			; 测试第6位
				NOP
				NOP
				BC 		next3,NTC
				LD 		#3Ch,B				; 3Ch=78h /2的取整
				AND    	B,A
				RSBX   	C
				ROL	A
				ROL	A
				ST 		5,*AR4
				B 		cmpssover
next3:	       	BIT		*AR3,15-5			; 测试第5位
				NOP
				NOP
				BC 		next4,NTC
				LD 		#1Eh,B				; 1E h=3Ch /2的取整
				AND    	B,A
				RSBX   	C
				RPT		#2
				ROL	A
				ST 		4,*AR4
				B 		cmpssover
next4:			BIT		*AR3,15-4			; 测试第4位
				NOP
				NOP
				BC 		next5,NTC
				LD 		#0Fh,B				; 0F h=1E h /2的取整
				AND    	B,A
				RSBX   	C
				RPT		#3
				ROL	A
				ST 		3,*AR4
				B 		cmpssover
next5:	        	BIT		*AR3,15-3			; 测试第3位
				NOP
				NOP
				BC 		next6,NTC
				LD 		#7h,B				; 7 h=0F h /2的取整
				AND    	B,A
				RSBX   	C
				RPT		#4
				ROL		A
				ST 		2,*AR4
				B 		cmpssover
next6:			BIT		*AR3,15-2			; 测试第2位
				NOP
				NOP
				BC 		next7,NTC
				LD 		#3h,B				; 3 h=7 h /2的取整
				AND    	B,A
				RSBX   	C
				RPT		#5
				ROL		A
				ST 		1,*AR4
				B 		cmpssover
next7:			LD 		#1h,B				; 1 h=3 h /2的取整
				AND    	B,A
				RSBX   	C
				RPT		#6
				ROL		A
				ST 		0,*AR4
cmpssover:										; 压缩子程序
				LDM		AR2,B
				BC 		nchgsign,BEQ
				LD 		*AR4,B
				RSBX   	OVM
				NEG    	B
				STL		B,*AR4
nchgsign:
				LD 		#0Fh,B
				AND   	*AR4,B
				OR		B,A
				STL		A,*AR4
				NOP
				LD 		*AR3+,A
				LD		*AR4+,A
				LD		*AR7,A
				SUB		#1,A
				STL		A,*AR7
				BC		loop1,ANEQ
				NOP
				STM		#1023,*AR7
				STM		speechsave,AR4
				STM		speechout,AR3
loop2:			STM		0,AR2
				LD 		#0Fh,B
				LD 		*AR4,A
				AND 	B,A
				BIT		*AR4,15-1			; 测试第1位
				NOP
				NOP
				BC 		nchgsign2,NTC
				STM		1,AR2
				RSBX	OVM
				NEG 	A
				AND 	B,A
nchgsign2:			BC 		dcmpssover,AEQ
				STM		1D00h,AR5
				STL 		A,*AR5
				STM		1D01h,AR6
				LD 		#7,A
				SUB		*AR5,A
				STL 		A,*AR6
				
				LD 		*AR4,A
				LD     	#0F0h,B
				AND   	B,A
				LD 		#2,B
				RSBX	C
				RPT 		*AR5
				ROL 	B
				ROR	B
				RPT		*AR6
				ROR	A
				ROL	A
dcmpssover:			
				ADD 	A,B
				LDM 	AR2,A
				BC 		nchgsign3,AEQ
				RSBX	OVM
				NEG 	B
nchgsign3:			
				STL		B,*AR3
				NOP	
				LD 		*AR3+,A
				LD		*AR4+,A
				LD		*AR7,A
				SUB		#1,A
				STL		A,*AR7
				BC		loop2,ANEQ
				NOP	
finish:           	B       finish

⌨️ 快捷键说明

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