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

📄 resave.asm

📁 在采样的基础上实现数码管显示和利用TI公司的FFT算法进行运算
💻 ASM
字号:
__FFTC_brev1_frs    .set    00002h  ; Local frame size for this routine 
                .def _resave
                .global _resave
_resave:  
            POPD    *+              ; Store the Return Address in stack
            SAR     AR0,*+          ; Store the Caller's Frame Pointer
            SAR     AR7,*+
            SAR     AR1,*                 
            LAR     AR5,*
            LAR     AR0,#__FFTC_brev1_frs       
            LAR     AR0,*0+,AR2     ; Create Local frame 
                
            LAR     AR2,#0FFFCh     ; ARP=AR2, AR2=-4
            MAR     *0+             ; ARP=AR2, AR2->src
            LAR     AR0,*           ; ARP=AR2, AR2->src, AR0=src
            LAR     AR3,*-          ; ARP=AR2, AR2->dst, AR3=src
            LAR     AR4,*-,AR4      ; ARP=AR4, AR4=dst, AR2->size   
            CMPR    0               ; Check src==dst
            BCND    OFFBREV,NTC     ; If not equal, jump to off place bit rev

            MAR     *,AR2           ; ARP=AR2, AR2->size
            LACL    *+,AR5          ; ARP=AR5, AR5=FP, AR2->dst, ACCL=size
            SFR                     ; ARP=AR5, AR5=FP, ACCL=size/2
            SACL    *               ; ARP=AR5, (FP)=size/2
            LAR     AR7,*+,AR7      ; ARP=AR7, AR7=size/2, AR5->temp
            MAR     *-,AR3          ; ARP=AR3, AR3=src, AR7=(size/2)-1
                    
brev1LP1:   LACC    *,16,AR4        ; ARP=AR4, AR4=dst, ACCH=*src
            ADDS    *,AR5           ; ARP=AR5, AR5->temp, ACCL=*dst
            SAR     AR4,*           ; ARP=AR5, AR5->temp, temp=dst   
            LAR     AR0,*-,AR3      ; ARP=AR3, AR3=src, AR5=FP, AR0=dst 
            CMPR    1               ; check AR3<AR0
            BCND    noswap,NTC      ; if src<dst, do not swap *src & *dst
            SACL    *,AR4           ; ARP=AR4, AR4=dst, *src=*dst
            SACH    *,AR3           ; ARP=AR3, AR3=src, *dst=*src
           
noswap:     MAR     *+,AR5          ; ARP=AR5, AR5=FP, (FP)=size/2, AR3=src+1
            LAR     AR0,*+,AR3      ; ARP=AR3, AR3=src+1, AR0=size/2, AR5->temp 
            MAR     *+,AR4          ; ARP=AR4, AR4=dst, AR3=src+2
            MAR     *BR0+,AR7       ; ARP=AR7, AR7=(size/2)-1, dst=br(dst+size/2)
            BANZ    brev1LP1,*-,AR3 ; ARP=AR3, AR3->src+2, AR7=AR7-1 
             
            MAR     *,AR2           ; ARP=AR2, AR2->dst
            LAR     AR3,*,AR5       ; ARP=AR5, AR5->temp, AR3=dst=src   
            SBRK    #1              ; ARP=AR5, AR5=FP, (FP)=size/2
            LACC    *+,1,AR2        ; ARP=AR2, AR2->dst, AR5->temp, ACCL=size
            ADDS    *,AR5           ; ARP=AR5, AR5->temp, ACCL=dst+size 
            SACL    *               ; ARP=AR5, AR5->temp, temp=dst+size
            LAR     AR4,*-          ; ARP=AR5, AR5=FP, AR4=dst+size
            LAR     AR0,*           ; ARP=AR5, AR5=FP, (FP)=size/2, AR0=size/2
            LAR     AR7,*,AR7       ; ARP=AR7, AR7=size/2
            MAR     *-,AR3          ; ARP=AR3, AR3=src, AR7=(size/2)-1 
            ADRK    #1              ; ARP=AR3, AR3=src+1
                    
brev1LP2:   LACL    *+              ; ARP=AR3, AR3=src+2, ACCL=*(src+1)
            MAR     *+,AR4          ; ARP=AR4, AR4=dst+size, AR3=src+3
            SACL    *BR0+,0,AR7     ; ARP=AR7, AR7=(size/2)-1, AR4=br(dst+size+size/2)
            BANZ    brev1LP2,*-,AR3  ; ARP=AR3, AR3=src+3, AR7=AR7-1
                        
            MAR     *,AR1
            SBRK    #(__FFTC_brev1_frs+1) ; Clear the local frame
            LAR     AR7,*-
            LAR     AR0,*-          ; Retrive Caller's frame pointer
            PSHD    *               ; Push the return address to TOS
            RET  

OFFBREV:    MAR     *,AR2           ; ARP=AR2, AR2->size
            LAR     AR0,*           ; ARP=AR2, AR2->size, AR0=size      
            LAR     AR7,*,AR7       ; ARP=AR7, AR7=size
            MAR     *-,AR3          ; ARP=AR3, AR3=src, AR7=size-1
            
offbrevLP   LACL    *+,AR4          ; ARP=AR4, AR4=dst, AR3=src+1, ACCL=*src
            SACL    *BR0+,0,AR7     ; ARP=AR7, AR7=size-1, AR4=br(dst+size)
            BANZ    offbrevLP,*-,AR3 ; ARP=AR3, AR3->src+1, AR7=AR7-1                  
            
            MAR     *,AR1
            SBRK    #(__FFTC_brev1_frs+1)   ; Clear the local frame
            LAR     AR7,*-
            LAR     AR0,*-          ; Retrive Caller's frame pointer
            PSHD    *               ; Push the return address to TOS
            RET  

⌨️ 快捷键说明

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