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

📄 fdct.asm

📁 DCT算法在DSP上的实现
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	ADD    *AR1+, 4, A           ; + (16)*(X4) 
	ADD    *AR1+, 4, A           ; + (16)*(X5) 
	ADD    *AR1+, 4, A           ; + (16)*(X6) 
	ADD    *AR1, 4, A            ; + (16)*(X7)  
	STL    A, Y20                ; = Y20


        RPTZ   A, #7
        MACP   *AR1-, COEF_F1, A
        SFTA   A, 4
        MAR    *AR1+                 ; (64)[A*X0+B*X1+C*X2-D*X3-D*X4
        ADD    ROUND1, A             ; -C*X5-B*X6-A*X7] + 4*ROUND1    
        STH    A, 2, Y21             ; = Y21

        
        LD     ROUND1, -4, A         ; (ROUND1)/16           
        LD     E_P6, T                 
        MAC    *AR1+0, A             ; + X0*E_P6
        MAS    *AR1+, A              ; - X3*E_P6 
        MAS    *AR1+0, A             ; - X4*E_P6
        MAC    *AR1-, A              ; + X7*E_P6
        LD     F_P6, T                
	MAC    *AR1-, A              ; + X6*F_P6
        MAS    *AR1-0, A             ; - X5*F_P6
        MAS    *AR1-, A              ; - X2*F_P6
        MAC    *AR1-, A              ; + X1*F_P6                           
        STH    A, 6, Y22             ; Multiply prev summation by 16
                                     ; = Y22


        RPTZ   A, #7                  
        MACP   *AR1+, COEFF2, A      ; 64(B*X0-D*X1-A*X2-C*X3+C*X4+A*X5 
        SFTA   A, 4                  
        MAR    *AR1-                 
        ADD    ROUND1, A             ; +D*X6-B*X7) + 4*ROUND1               
        STH    A, 2, Y23             ; = Y23


	LD    *AR1-, 4, A            ;   X7*16
        SUB   *AR1-, 4, A            ; - X6*16                
        SUB   *AR1-, 4, A            ; - X5*16
        ADD   *AR1-, 4, A            ; + X4*16
        ADD   *AR1-, 4, A            ; + X3*16
        SUB   *AR1-, 4, A            ; - X2*16 
        SUB   *AR1-, 4, A            ; - X1*16
        ADD   *AR1, 4, A             ; + X0*16
        STL   A, Y24                 ; = Y24

		
        RPTZ  A, #7                  
        MACP  *AR1+, COEFF3, A       ; 8(D*X0-C*X1+B*X2-A*X3+A*X4-B*X5 
        SFTA  A, 4                   ; +C*X6-D*X7) 
        MAR   *AR1-                  
        ADD   ROUND1, A              ; + 4*ROUND1
        STH   A, 2, Y25              ; = Y25


	LD    ROUND1, -4, A          ; (ROUND1)/16
        LD    F_P6, T                
        MAC   *AR1-0, A              ; + F_P6*X7
        MAS   *AR1-, A               ; - F_P6*X4
        MAS   *AR1-0, A              ; - F_P6*X3
        MAC   *AR1+, A               ; + F_P6*X0
        LD    E_P6, T
        MAS   *AR1+, A               ; - E_P6*X1 
        MAC   *AR1+0, A              ; + E_P6*X2
        MAC   *AR1+, A               ; + E_P6*X5
        MAS   *AR1+, A               ; - E_P6*X6
        STH   A, 6, Y26              ; Multiply prev summation by 16
                                     ; = Y26  

        RPTZ   A, #7
        MACP  *AR1-, COEF_F4, A      ; 64(D*X0-C*X1+B*X2-A*X3+A*X4-B*X5
        SFTA  A, 4                   ; +C*X6-D*X7)
        MAR   *AR1+                  
        ADD   ROUND1, A              ; + 4*ROUND1
        STH   A, 2, Y27              ; = Y27
        
        MAR   *+AR1(8)               ; Set AR1 to point to the next set  
                                     ; of 8 inputs

*********************************************************************
;								    *
; PROCESS FOURTH 8 INPUTS.    X(3,0)...X(3,7)  ->  Y(3,0)...Y(3,7)  *
;								    *
*********************************************************************

        LD     *AR1+, 4, A           ; + (16)*(X0) 
        ADD    *AR1+, 4, A           ; + (16)*(X1)  
        ADD    *AR1+, 4, A           ; + (16)*(X2) 
        ADD    *AR1+, 4, A           ; + (16)*(X3) 
	ADD    *AR1+, 4, A           ; + (16)*(X4) 
	ADD    *AR1+, 4, A           ; + (16)*(X5) 
	ADD    *AR1+, 4, A           ; + (16)*(X6) 
	ADD    *AR1, 4, A            ; + (16)*(X7)  
	STL    A, Y30                ; = Y30


        RPTZ   A, #7                  
        MACP   *AR1-, COEF_F1, A         
        SFTA   A, 4                  
        MAR    *AR1+                 ; (64)[A*X0+B*X1+C*X2-D*X3-D*X4
        ADD    ROUND1, A             ; -C*X5-B*X6-A*X7] + 4*ROUND1    
        STH    A, 2, Y31             ; = Y31

        
        LD     ROUND1, -4, A         ; (ROUND1)/16           
        LD     E_P6, T                 
        MAC    *AR1+0, A             ; + X0*E_P6
        MAS    *AR1+, A              ; - X3*E_P6 
        MAS    *AR1+0, A             ; - X4*E_P6
        MAC    *AR1-, A              ; + X7*E_P6
        LD     F_P6, T                
	MAC    *AR1-, A              ; + X6*F_P6
        MAS    *AR1-0, A             ; - X5*F_P6
        MAS    *AR1-, A              ; - X2*F_P6
        MAC    *AR1-, A              ; + X1*F_P6                           
        STH    A, 6, Y32             ; Multiply prev summation by 16
                                     ; = Y32


        RPTZ   A, #7                  
        MACP   *AR1+, COEFF2, A      ; 64(B*X0-D*X1-A*X2-C*X3+C*X4+A*X5 
        SFTA   A, 4                  
        MAR    *AR1-                 
        ADD    ROUND1, A             ; +D*X6-B*X7) + 4*ROUND1               
        STH    A, 2, Y33             ; = Y33


	LD    *AR1-, 4, A            ;   X7*16
        SUB   *AR1-, 4, A            ; - X6*16                
        SUB   *AR1-, 4, A            ; - X5*16
        ADD   *AR1-, 4, A            ; + X4*16
        ADD   *AR1-, 4, A            ; + X3*16
        SUB   *AR1-, 4, A            ; - X2*16 
        SUB   *AR1-, 4, A            ; - X1*16
        ADD   *AR1, 4, A             ; + X0*16
        STL   A, Y34                 ; = Y34

		
        RPTZ  A, #7                  
        MACP  *AR1+, COEFF3, A       ; 8(D*X0-C*X1+B*X2-A*X3+A*X4-B*X5 
        SFTA  A, 4                   ; +C*X6-D*X7) 
        MAR   *AR1-                  
        ADD   ROUND1, A              ; + 4*ROUND1
        STH   A, 2, Y35              ; = Y35


	LD    ROUND1, -4, A          ; (ROUND1)/16
        LD    F_P6, T                
        MAC   *AR1-0, A              ; + F_P6*X7
        MAS   *AR1-, A               ; - F_P6*X4
        MAS   *AR1-0, A              ; - F_P6*X3
        MAC   *AR1+, A               ; + F_P6*X0
        LD    E_P6, T
        MAS   *AR1+, A               ; - E_P6*X1 
        MAC   *AR1+0, A              ; + E_P6*X2
        MAC   *AR1+, A               ; + E_P6*X5
        MAS   *AR1+, A               ; - E_P6*X6
        STH   A, 6, Y36              ; Multiply prev summation by 16
                                     ; = Y36  

        RPTZ   A, #7
        MACP  *AR1-, COEF_F4, A      ; 64(D*X0-C*X1+B*X2-A*X3+A*X4-B*X5
        SFTA  A, 4                   ; +C*X6-D*X7)
        MAR   *AR1+                  
        ADD   ROUND1, A              ; + 4*ROUND1
        STH   A, 2, Y37              ; = Y37
        
        MAR   *+AR1(8)               ; Set AR1 to point to the next set  
                                     ; of 8 inputs


*********************************************************************
;								    *
; PROCESS FIFTH 8 INPUTS.     X(4,0)...X(4,7)  ->  Y(4,0)...Y(4,7)  *
;								    *
*********************************************************************

        LD     *AR1+, 4, A           ; + (16)*(X0) 
        ADD    *AR1+, 4, A           ; + (16)*(X1)  
        ADD    *AR1+, 4, A           ; + (16)*(X2) 
        ADD    *AR1+, 4, A           ; + (16)*(X3) 
	ADD    *AR1+, 4, A           ; + (16)*(X4) 
	ADD    *AR1+, 4, A           ; + (16)*(X5) 
	ADD    *AR1+, 4, A           ; + (16)*(X6) 
	ADD    *AR1, 4, A            ; + (16)*(X7)  
	STL    A, Y40                ; = Y40


        RPTZ   A, #7                  
        MACP   *AR1-, COEF_F1, A         
        SFTA   A, 4                  
        MAR    *AR1+                 ; (64)[A*X0+B*X1+C*X2-D*X3-D*X4
        ADD    ROUND1, A             ; -C*X5-B*X6-A*X7] + 4*ROUND1    
        STH    A, 2, Y41             ; = Y41

        
        LD     ROUND1, -4, A         ; (ROUND1)/16           
        LD     E_P6, T                 
        MAC    *AR1+0, A             ; + X0*E_P6
        MAS    *AR1+, A              ; - X3*E_P6 
        MAS    *AR1+0, A             ; - X4*E_P6
        MAC    *AR1-, A              ; + X7*E_P6
        LD     F_P6, T                
	MAC    *AR1-, A              ; + X6*F_P6
        MAS    *AR1-0, A             ; - X5*F_P6
        MAS    *AR1-, A              ; - X2*F_P6
        MAC    *AR1-, A              ; + X1*F_P6                           
        STH    A, 6, Y42             ; Multiply prev summation by 16
                                     ; = Y42


        RPTZ   A, #7                  
        MACP   *AR1+, COEFF2, A      ; 64(B*X0-D*X1-A*X2-C*X3+C*X4+A*X5 
        SFTA   A, 4                  
        MAR    *AR1-                 
        ADD    ROUND1, A             ; +D*X6-B*X7) + 4*ROUND1               
        STH    A, 2, Y43             ; = Y43


	LD    *AR1-, 4, A            ;   X7*16
        SUB   *AR1-, 4, A            ; - X6*16                
        SUB   *AR1-, 4, A            ; - X5*16
        ADD   *AR1-, 4, A            ; + X4*16
        ADD   *AR1-, 4, A            ; + X3*16
        SUB   *AR1-, 4, A            ; - X2*16 
        SUB   *AR1-, 4, A            ; - X1*16
        ADD   *AR1, 4, A             ; + X0*16
        STL   A, Y44                 ; = Y44

		
        RPTZ  A, #7                  
        MACP  *AR1+, COEFF3, A       ; 8(D*X0-C*X1+B*X2-A*X3+A*X4-B*X5 
        SFTA  A, 4                   ; +C*X6-D*X7) 
        MAR   *AR1-                  
        ADD   ROUND1, A              ; + 4*ROUND1
        STH   A, 2, Y45              ; = Y45


	LD    ROUND1, -4, A          ; (ROUND1)/16
        LD    F_P6, T                
        MAC   *AR1-0, A              ; + F_P6*X7
        MAS   *AR1-, A               ; - F_P6*X4
        MAS   *AR1-0, A              ; - F_P6*X3
        MAC   *AR1+, A               ; + F_P6*X0
        LD    E_P6, T
        MAS   *AR1+, A               ; - E_P6*X1 
        MAC   *AR1+0, A              ; + E_P6*X2
        MAC   *AR1+, A               ; + E_P6*X5
        MAS   *AR1+, A               ; - E_P6*X6
        STH   A, 6, Y46              ; Multiply prev summation by 16
                                     ; = Y46  

        RPTZ   A, #7
        MACP  *AR1-, COEF_F4, A      ; 64(D*X0-C*X1+B*X2-A*X3+A*X4-B*X5
        SFTA  A, 4                   ; +C*X6-D*X7)
        MAR   *AR1+                  
        ADD   ROUND1, A              ; + 4*ROUND1
        STH   A, 2, Y47              ; = Y47
ERROR:        
        MAR   *+AR1(8)               ; Set AR1 to point to the next set  
                                     ; of 8 inputs
        NOP
        NOP
        NOP
        NOP

*********************************************************************
;								    *
; PROCESS SIXTH 8 INPUTS.     X(5,0)...X(5,7)  ->  Y(5,0)...Y(5,7)  *
;								    *
*********************************************************************

        LD     *AR1+, 4, A           ; + (16)*(X0) 
        ADD    *AR1+, 4, A           ; + (16)*(X1)  
        ADD    *AR1+, 4, A           ; + (16)*(X2) 
        ADD    *AR1+, 4, A           ; + (16)*(X3) 
	ADD    *AR1+, 4, A           ; + (16)*(X4) 
	ADD    *AR1+, 4, A           ; + (16)*(X5) 
	ADD    *AR1+, 4, A           ; + (16)*(X6) 
	ADD    *AR1, 4, A            ; + (16)*(X7)  
	STL    A, Y50                ; = Y50


        RPTZ   A, #7                  
        MACP   *AR1-, COEF_F1, A         
        SFTA   A, 4                  
        MAR    *AR1+                 ; (64)[A*X0+B*X1+C*X2-D*X3-D*X4
        ADD    ROUND1, A             ; -C*X5-B*X6-A*X7] + 4*ROUND1    
        STH    A, 2, Y51             ; = Y51

        
        LD     ROUND1, -4, A         ; (ROUND1)/16           
        LD     E_P6, T                 
        MAC    *AR1+0, A             ; + X0*E_P6
        MAS    *AR1+, A              ; - X3*E_P6 
        MAS    *AR1+0, A             ; - X4*E_P6
        MAC    *AR1-, A              ; + X7*E_P6
        LD     F_P6, T                
	MAC    *AR1-, A              ; + X6*F_P6
        MAS    *AR1-0, A             ; - X5*F_P6
        MAS    *AR1-, A              ; - X2*F_P6
        MAC    *AR1-, A              ; + X1*F_P6                           
        STH    A, 6, Y52             ; Multiply prev summation by 16
                                     ; = Y52


        RPTZ   A, #7                  
        MACP   *AR1+, COEFF2, A      ; 64(B*X0-D*X1-A*X2-C*X3+C*X4+A*X5 
        SFTA   A, 4                  
        MAR    *AR1-
        ADD    ROUND1, A             ; +D*X6-B*X7) + 4*ROUND1
        STH    A, 2, Y53             ; = Y53


	LD    *AR1-, 4, A            ;   X7*16
        SUB   *AR1-, 4, A            ; - X6*16                
        SUB   *AR1-, 4, A            ; - X5*16
        ADD   *AR1-, 4, A            ; + X4*16
        ADD   *AR1-, 4, A            ; + X3*16
        SUB   *AR1-, 4, A            ; - X2*16 

⌨️ 快捷键说明

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