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

📄 convol.asm

📁 CCS3.3自带的TI 5400系列DSP的dsplib文件。文档说明可以在TI公司网站上下载。
💻 ASM
字号:
;***********************************************************
; Version 2.20.01                                           
;***********************************************************
;****************************************************************
;  Function:	convol.asm
;  Description: positive convolution of two vectors
;----------------------------------------------------------------
;  Revision History:
;  1.00, Original Beta Release 6/98.
;****************************************************************


	.mmregs
	.global _convol
_convol

; Far-mode adjustment

	.if __far_mode
OFFSET	.set	2
        .else
OFFSET	.set	1
	.endif

	.if __far_mode
FRAME_SZ	.set	0
	.else
FRAME_SZ	.set	0
	.endif

REG_SAVE_SZ	.set	3

PARAM_OFFSET	.set OFFSET + REG_SAVE_SZ + FRAME_SZ

	.asg    0 + FRAME_SZ, SAVE_AR1
        .asg    0 + FRAME_SZ + REG_SAVE_SZ, RETURN_ADDR
        .asg    0 + PARAM_OFFSET, h
        .asg    1 + PARAM_OFFSET, r
        .asg    2 + PARAM_OFFSET, nh
        .asg    3 + PARAM_OFFSET, nr

        .asg	AR0, count
        .asg    AR1, h_save
	.asg	AR2, r_ptr
	.asg	AR3, x_ptr
	.asg	AR4, h_ptr
	.asg	AR5, x_save

   
        PSHM    AR1                             ; 1 cycle
        PSHM    ST0                                 ; 1 cycle
        PSHM    ST1                                 ; 1 cycle
        RSBX    OVA                                 ; 1 cycle
        RSBX    OVB                                 ; 1 cycle

	FRAME #-FRAME_SZ                        ; 1 cycle

        SSBX    SXM                             ; 1 cycle
        SSBX    FRCT                            ; 1 cycle

;
; Copy arguments to their local locations as necessary        
;----------------------------------------------------------------

        STLM    A, x_ptr                        ; 1 cycle
	MVDK	*sp(h), h_ptr		        ; 2 cycles
	MVDK	*sp(r), r_ptr                   ; 2 cycles
	
        LD      *sp(nr), A                      ; 1 cycle
        SUB     #1, A                           ; 2 cycles
        STLM    A, BRC                          ; 1 cycle


        LD      *sp(nh), A                      ; 1 cycle
        STLM    A, count                        ; 1 cycle

        MVMM    h_ptr, h_save                   ; 1 cycle
 
       
;
; Calculate starting address for x[ncoeffs - 1]              
;----------------------------------------------------------------

        LDM    x_ptr, B                        ; 1 cycle
        ADD    *sp(nh), B                      ; 1 cycle
  	SUB    #1, B                           ; 1 cycle

        STLM   B, x_save                       ; 1 cycle
        STLM   B, x_ptr                        ; 1 cycle
  
;
; Begin outer loop on outputs to generate                     
;----------------------------------------------------------------

L1:  RPTBD END_LOOP - 1                         ; 2 cycles
      MAR    *+count(-3)                        ; 2 cycles
;
; Store starting address for pointer into vector b          
; Note: This is one less than actual since this is          
; pre-incremented in the repeat block loop                  
;----------------------------------------------------------------
      MAR     *x_save+                         ; 1 cycle
    
 
      MPY     *h_ptr+, *x_ptr- , A             ; 1 cycle
      RPT     *(count)                         ; 1 cycle
      MAC     *h_ptr+, *x_ptr-, A              ; nh-2 cycles   
      MACR    *h_ptr , *x_ptr , A              ; 1 cycle

      MVMM    h_save, h_ptr                    ; 1 cycle
      MVMM    x_save, x_ptr                    ; 1 cycle

;
; Zero the accumulator before calculating next sum.         
; Reset to point to first element in vector a               
;----------------------------------------------------------------

      STH     A, *r_ptr+                       ; 1 cycle


END_LOOP: 
        

;
; Return to calling function, restoring C environment first 
; If necessary                                              
;----------------------------------------------------------------


	LD	#0, A			       ; 1 cycle
	XC	1, AOV			       ; 1 cycle
	LD	#1, A                          ; 1 cycle

	FRAME	#FRAME_SZ                      ; 1 cycle

        POPM    ST1                            ; 1 cycle
        POPM    ST0                            ; 1 cycle
        POPM    AR1                            ; 1 cycle

        .if __far_mode
	FRETD                                  ; 4 cycles
        .else
	RETD                                   ; 3 cycles
        .endif
        NOP                                    ; 1 cycle
	NOP      			       ; 1 cycle


⌨️ 快捷键说明

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