www.pudn.com > DSPstudyandexample.rar > C6_4_2.ASM


           	.title  		"CVSDcoder.asm" 
            	.mmregs             
STACK       	.usect		"STACK",10h 
            	.global 	Init, Begin 
DeltaMax	.set		1280h 
DeltaMin	.set		65h 
Beta    	.set		99h 
Delta0CVSD  	.set		10h 
  
            	.data 
TBL:        	.word		0,1,0 
            	.bss		ThreeJudge,3 
            	.bss		InData,1 
            	.bss		OutData,1 
            	.bss		DeltaCVSD,1 
            	.bss		ValPreCVSD,1 
             
            	.text 
Init:        	STM		#ThreeJudge,AR5        
             	RPT		#3                     
             	MVPD   		TBL,*AR5+              
             	STM		#ThreeJudge,AR5        
             	ST 		#20,*(DeltaCVSD)       
             	ST 		#0,*(ValPreCVSD)       
             	ST     		#100,*(InData)         
             
Begin:       		LD 	*(InData),A            
             		STLM	A,AR1                	 
			LD 	*(ValPreCVSD),A        
			STLM	A,AR0                	 
			CMPR	LT,AR1                 
			BC	DiffNeg,TC             
			  
			STM 	#1,*AR5+               
			ST 	#1,*(OutData)          
							 
			 LD 	#1,A 
			 AND	*AR5+,A 
			 AND	*AR5+,A			 
			 BC	L1,ANEQ         	 
			  
			 STM 	#DeltaCVSD,AR6         
			 STM	#Beta,T                
			 MPY	AR6,A                  
			 B 	L2			  
L1:			 LD 	#DeltaCVSD,A          	 
             	 	STM	#Delta0CVSD,AR3;      	 
             	 	ADD 	AR3,A                 	 
             						 
L2:          		STM	#DeltaMax,AR0          	 
			STL	A,AR4                 	 
             		CMPR	LT,AR4                	        
             		BC	L3,TC                 	 
             		LD 	AR0,A             	       
             						 
L3:          		STM	#DeltaMin,AR0         	 
		    	STL	A,AR4                 	 
             		CMPR	GT,AR4                	       
             		BC	L4,TC                 	 
             		LD 	AR0,A             	 
L4:          		STL 	A,*(DeltaCVSD)        	 
             		STM 	#ValPreCVSD,AR4       	 
             		ADD 	*AR4,A                	 
             		STL	A,*(ValPreCVSD)       	 
             		B 	ending                   
DiffNeg:	 	STM 	#0,*AR5+              	 
			ST 	#0,*(OutData)         	 
             						 
             		LD 	#0,A 
			ADD	*AR5+,A 
			ADD	*AR5+,A 
			BC	L5,ANEQ               			  
			LD 	#DeltaCVSD,A 
             		STM	#Delta0CVSD,AR3; 
             		ADD 	AR3,A          		 
			B 	L6			 
L5:			STM 	#DeltaCVSD,AR6 
			STM	#Beta,T         
			MPY	AR6,A                    
L6:          		STM	#DeltaMax,AR0 
			STL	A,AR4	 
             		CMPR	LT,AR4           	     
              		BC	L7,TC          		 
              		LD 	AR0,A              
L7:           		STM	#DeltaMin,AR0 
              		CMPR	GT,AR4           	     
              		BC	L8,TC          		 
              		LD 	AR0,A 
L8:          		STL 	A,*(DeltaCVSD) 
              		STL 	A,AR4 
              		STM 	#ValPreCVSD,AR6 
              		LD 	*(AR6),A 
              		SUB 	AR4,A 
              		STL	A,*(ValPreCVSD) 
ending:	     		STL	A,*(ValPreCVSD) 
              .END