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

📄 build_code.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     build_code() in c2_9pf.c                               **
**                                                                         **
** Inputs                                                                  **
**                                                                         **
**   al  ---Word16 subNr                                                   **
**   xar2---Word16 codvec[]                                                **
**   xar3---Word16 dn_sign[]                                               **
**   xar4---Word16 Word16 h[]                                              **
**                                                                         **
** Outputs:                                                                **
**                                                                         **
**   xar5---Word16 cod[]                                                   **
**   xar6---Word16 y[]                                                     **         
**   xar7---Word16 sign[]                                                  **                      
**                                                                         ** 
**                                                                         **
** Return value :       pl                                                 **
**                                                                         **
** Attribute    :       Cycles:3564     Pm: 96                             **
**                      Modified Registers:  all                           **
**                                                                         **
** Programmer   :       Qi Ying                                            **
*****************************************************************************
            .include  "trackTable.asm"
            .global   _build_code
            .ref      _buffer1
            .ref      _buffer2
            .ref      _buffer3             
_build_code:
            addb    sp,           #20
            movl    *-sp[2],      xar4          ;*-sp[2]=h
            movl    *-sp[4],      xar6          ;*-sp[4]=y 
            movl    *-sp[6],      xar7          ;*-sp[6]=sign
            movl    *-sp[10],     xar3          ;*-sp[10]=dn_sign
            mov     pl,           al            ;pl=subNr
            lsl     al,           #2
            add     pl,           al
            movl    xar4,         #trackTable           
            movl    acc,          xar4
            add     acc,          pl
            movl    xar4,         acc           ;xar4=pt=&trackTable[add(subNr, shl(subNr, 2))
            mov     ar0,          #39
_Line_304:
            mov     *xar5++,      #0            ;cod[i]=0
            banz    _Line_304,    ar0--
            subb    xar5,         #40           ;xar5指回cod数组头            
            movb    acc,          #0
            movl    p,            acc           ;pl=indx,ph=rsign
            mov     ar0,          #0            ;ar0=k
_Loop_310:
            cmp     ar0,          #2
            sb      _Line_352,    GEQ
            movl    xar3,         *-sp[10]      ;dn_sign[]
            movz    ar1,          *+xar2[ar0]   ;ar1=i
            mov     ar6,          *+xar3[ar1]   ;ar6=j
            addB    xar3,         #100          ;xar3=_sign  
            mpy     acc,    ar1,  #6554
            lsl     acc,          #1            ;ah=index
            mov     ar7,          ah            ;ar7=index 
            mpy     acc,    ah,   #5            ;al=extract_l(L_shr(L_mult(index, 5), 1))
            mov     *-sp[12],     ar1           ;*-sp[12]=i
            sub     ar1,          al            ;ar1=track
            cmp     *+xar4[ar1],  #0            ;*+xar4[ar1]=first
            sb      _Line_329,    NEQ           ;比较first与0
            cmp     ar0,          #0            ;比较k与0
            sb      _Line_325,    NEQ
            mov     ar1,          #0      
            sb      _Line_341,    UNC 
_Line_325:
            mov     ar1,          #1
            mov     al,           ar7
            lsl     al,           #3
            mov     ar7,          al            ;index = shl(index, 3) 
            sb      _Line_341,    UNC
_Line_329:            
            cmp     ar0,          #0            ;比较k与0
            sb      _Line_334,    NEQ
            mov     ar1,          #0      
            mov     al,           ar7
            add     al,           #64
            mov     ar7,          al            ;index = add(index, 64)
            sb      _Line_341,    UNC
_Line_334:
            mov     ar1,          #1
            mov     al,           ar7
            lsl     al,           #3
            mov     ar7,          al            ;index = shl(index, 3) 
_Line_341:
            cmp     ar6,          #0            ;比较j与0
            sb      _Line_345,    LEQ
            mov     T,            ar1           ;T=track
            mov     al,           #1
            lsl     al,           T  
            add     ph,           al            ;rsign = add(rsign, shl(1, track))
            movz    ar1,          *-sp[12]      ;ar1=i
            mov     *+xar5[ar1],  #8191
            mov     *+xar3[ar0],  #32767        ;_sign[k] = 32767
            sb      _Line_350,    UNC
_Line_345:             
            movz    ar1,          *-sp[12]      ;ar1=i
            mov     *+xar5[ar1],  #-8192
            mov     *+xar3[ar0],  #-32767       ;_sign[k] =-32767            
_Line_350:
            mov     al,           ar7
            add     pl,           al            ;indx = add(indx, index)
            inc     ar0
            sb      _Loop_310,    UNC
_Line_352:            
            movl    xar7,         *-sp[6]       ;sign[] 
            movl    acc,          p
            mov     *xar7,        ah            ;*sign = rsign 
            movl    xar6 ,        *-sp[4]       ;xar6=y            
            movl    acc,          *-sp[2]       ;h  
            sub     acc,          *+xar2[0]     ;h - codvec[0]
            movl    xar4,         acc           ;xar4=p0
            movl    acc,          *-sp[2]       ;h
            sub     acc,          *+xar2[1]     ;h - codvec[1]
            movl    xar2,         acc           ;xar2=p1
            mov     ar0,          #0            ;ar0=i 
_Loop_357:
            cmp     ar0,          #40
            sb      _Line_364,    GEQ
            movb    xar1,         #0            ;xar1=s
            mov     T,            *xar4++
            mpy     acc,    T,    *+xar3[0]
            movl    xar1,         acc
            mov     T,            *xar2++
            mpy     acc,    T,    *+xar3[1]       
            addl    acc,          xar1 
            lsl     acc,          #1
            add     acc,          #0x0800<<#4
            mov     *+xar6[ar0],  ah
            inc     ar0
            sb      _Loop_357,    UNC
_Line_364:           
            subb    sp,           #20
            LRETR 

















⌨️ 快捷键说明

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