在DSP上实现DCT的三角波/方波/正弦波的显示代码(2)

2019-07-29 16:37发布

*********************************************************************
;            *
; 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
        SUB   *AR1-, 4, A            ; - X1*16
        ADD   *AR1, 4, A             ; + X0*16
        STL   A, Y54                 ; = Y54
  
        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, Y55              ; = Y55
        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, Y56              ; Multiply prev summation by 16
                                     ; = Y56
        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, Y57              ; = Y57
        
        MAR   *+AR1(8)               ; Set AR1 to point to the next set  
                                     ; of 8 inputs
*********************************************************************
;            *
; PROCESS SEVENTH 8 INPUTS.   X(6,0)...X(6,7)  ->  Y(6,0)...Y(6,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, Y60                ; = Y60

        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, Y61             ; = Y61
        
        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, Y62             ; Multiply prev summation by 16
                                     ; = Y62

        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, Y63             ; = Y63

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, Y64                 ; = Y64
  
        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, Y65              ; = Y65

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。