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

📄 basic_op.asm

📁 c 5402 g729a编码源代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
    xc      2,aov
    st      #1,*(_Overflow)
    xc      2,nc
    st      #0,*(_Carry)
    
    ldm      t,a
    sub      a,b
    nop
    nop
    
    xc      2,bov
    st      #1,*(_Overflow)
    xc      2,nc
    st      #0,*(_Carry)
    
    ld      b,a      
     
    POPM    ST1
    POPM    ST0
    
    ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Word32 L_negate(Word32 L_var1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_L_negate:
    PSHM    ST0
    PSHM    ST1
    RSBX    OVA
    RSBX    OVB
    
    ssbx	sxm
    ssbx	ovm
    
    neg     a

    POPM    ST1
    POPM    ST0

    RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Word16 mult_r(Word16 var1, Word16 var2)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_mult_r:
    PSHM    ST0
    PSHM    ST1
    RSBX    OVA
    RSBX    OVB
    
    SSBX    FRCT
    ssbx	sxm
    ld	    #0,ASM
    stm	    #0,bk
    ssbx	ovm			; to allow -1* -1		(1)
        
    STLM    A,T
    
    LD      #0,A
    MPYR    *SP(3),A
    ld      a,b
    st      #0,*(_Overflow)
    xc      2,aov
    st      #1,*(_Overflow)
    
    LD      b,-16,b
    ld      b,a
        
    POPM    ST1
    POPM    ST0

    RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Word32 L_shl(Word32 L_var1, Word16 var2)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_L_shl:
    PSHM    ST0
    PSHM    ST1
    RSBX    OVA
    RSBX    OVB
    
    ssbx	sxm
    ssbx	ovm	
    
    st      #0,*(_Overflow)
    
    ld      *sp(3),b
    and     #8000h,b
    bc      L_shl_R,bneq
    
    ld      *sp(3),b
    and     #0fff0h,b
    bc      L_shl_DO,beq
    
    ld      a,8,a
    bc      L_shl_O,aov
    ld      a,8,a
    bc      L_shl_O,aov
    
    ld      *sp(3),b
    sub     #10h,b
    stl     b,*sp(3)
    and     #0fff0h,b
    bc      L_shl_DO,beq
    ld      a,8,a
    ld      a,7,a
    b       L_shl_O
    
L_shl_DO:    
    ld      *sp(3),b
    and     #0fff8h,b
    bc      L_shl_FDO,beq
    
    ld      a,8,a
    bc      L_shl_O,aov
    ld      *sp(3),b
    sub     #8h,b
    stl     b,*sp(3) 
L_shl_FDO:    
    ld      *sp(3),asm
    ld      a,asm,a
    bc      L_shl_O,aov
    b       L_shl_E
L_shl_R:    
    ld      *sp(3),b
    and     #0fff0h,b
    xor     #0fff0h,b
    bc      L_shl_RDO,beq
    
    ld      a,-16,a
        
    addm    #10h,*sp(3)
    
    ld      *sp(3),b
    and     #0fff0h,b
    xor     #0fff0h,b
    bc      L_shl_RDO,beq
    ld      a,-16,a
    b       L_shl_E
L_shl_RDO:    
    ld      *sp(3),asm
    ld      a,asm,a
    b       L_shl_E  
L_shl_O:
    st      #1,*(_Overflow)         
L_shl_E:
    POPM    ST1
    POPM    ST0
    RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Word32 L_shr(Word32 L_var1, Word16 var2)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_L_shr:
    PSHM    ST0
    PSHM    ST1
    RSBX    OVA
    RSBX    OVB
    
    ssbx	sxm
    ssbx	ovm	
    
    st      #0,*(_Overflow)
    ld      *sp(3),16,b
    neg     b
    ld      b,-16,b
    stl     b,*sp(3)
    ;ld      *sp(3),b
    and     #8000h,b
    bc      L_shr_R,bneq
    
    ld      *sp(3),b
    and     #0fff0h,b
    bc      L_shr_DO,beq
    
    ld      a,8,a
    bc      L_shr_O,aov
    ld      a,8,a
    bc      L_shr_O,aov
    
    ld      *sp(3),b
    sub     #10h,b
    stl     b,*sp(3)
    and     #0fff0h,b
    bc      L_shr_DO,beq
    ld      a,8,a
    ld      a,7,a
    b       L_shr_O
    
L_shr_DO:    
    ld      *sp(3),b
    and     #0fff8h,b
    bc      L_shr_FDO,beq
    
    ld      a,8,a
    bc      L_shr_O,aov
    ld      *sp(3),b
    sub     #8h,b
    stl     b,*sp(3) 
L_shr_FDO:    
    ld      *sp(3),asm
    ld      a,asm,a
    bc      L_shr_O,aov
    b       L_shr_E
L_shr_R:    
    ld      *sp(3),b
    and     #0fff0h,b
    xor     #0fff0h,b
    bc      L_shr_RDO,beq
    
    ld      a,-16,a
        
    addm    #10h,*sp(3)
    
    ld      *sp(3),b
    and     #0fff0h,b
    xor     #0fff0h,b
    bc      L_shr_RDO,beq
    ld      a,-16,a
    b       L_shr_E
L_shr_RDO:    
    ld      *sp(3),asm
    ld      a,asm,a
    b       L_shr_E  
L_shr_O:
    st      #1,*(_Overflow)         
L_shr_E:
    POPM    ST1
    POPM    ST0

    RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Word16 shr_r(Word16 var1, Word16 var2)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_shr_r:
    PSHM    ST0
    PSHM    ST1
    RSBX    OVA
    RSBX    OVB
    
    ssbx	sxm
    ssbx	ovm
    ssbx    c16
    
    st      #0,*(_Overflow)
    ld      *sp(3),16,b
    neg     b
    ld      b,-16,b
    stl     b,*sp(3)      ;取负数
    
    ld      a,15,a
    ld      a,1,a
    
    and     #8000h,b
    bc      shr_r_R,bneq  ;检验左移还是右移
    
    ld      *sp(3),b
    and     #0fff0h,b     ;检验是否大于15
    bc      shr_r_DO,beq
    
    ld      a,8,a
    ld      a,8,a
    b       shr_r_O

shr_r_DO:    
    ld      *sp(3),b
    and     #0fff8h,b
    bc      shr_r_FDO,beq
    
    ld      a,8,a
    bc      shr_r_O,aov
    
    ld      *sp(3),b
    sub     #8h,b
    stl     b,*sp(3)
    
shr_r_FDO:        
    ld      *sp(3),asm
    ld      a,asm,a
    bc      shr_r_O,aov
    b       shr_r_E
shr_r_R:    
    ld      *sp(3),b
    and     #0fff0h,b
    xor     #0fff0h,b
    bc      shr_r_RDO,beq
    
    ld      #0,a
    b       shr_r_E

shr_r_RDO:    
    ld      *sp(3),asm
    ld      a,asm,a
    add     #4000h,1,a
    b       shr_r_E
shr_r_O:
    st      #1,*(_Overflow)
shr_r_E:
    ld      a,-16,a    
    POPM    ST1
    POPM    ST0
    RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Word16 mac_r(Word32 L_var3, Word16 var1, Word16 var2)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    
_mac_r:
    PSHM    ST0
    PSHM    ST1
    RSBX    OVA
    RSBX    OVB
    
    SSBX    FRCT
    ssbx	sxm
    ssbx	ovm
    
    st      #0,*(_Overflow)
    
    ld      *sp(3),t
    mac     *sp(4),a
    
    ld      a,b
    nop
    xc      2,aov
    st      #1,*(_Overflow)
    
    add     #4000h,1,b
    nop
    nop
    xc      2,bov
    st      #1,*(_Overflow)
    ld      b,-16,a 
         
    POPM    ST1
    POPM    ST0
    RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Word16 msu_r(Word32 L_var3, Word16 var1, Word16 var2)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_msu_r:
    PSHM    ST0
    PSHM    ST1
    RSBX    OVA
    RSBX    OVB
    
    SSBX    FRCT
    ssbx	sxm
    ssbx	ovm

    st      #0,*(_Overflow)
    ld      *sp(3),t
    mas     *sp(4),a
    
    ld      a,b
    nop
    xc      2,aov
    st      #1,*(_Overflow)
    
    add     #4000h,1,b
    nop
    nop
    xc      2,bov
    st      #1,*(_Overflow)
    ld      b,-16,a 
    
    POPM    ST1
    POPM    ST0
    RET    
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Word32 L_deposit_l(Word16 var1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_L_deposit_l:
    RET    
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Word32 L_shr_r(Word32 L_var1,Word16 var2)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_L_shr_r:
    PSHM    ST0
    PSHM    ST1
    RSBX    OVA
    RSBX    OVB
    
    ssbx	sxm
    ssbx	ovm	
    
    st      #0,*(_Overflow)
    ld      *sp(3),16,b
    neg     b
    ld      b,-16,b
    stl     b,*sp(3)

    and     #8000h,b
    bc      L_shr_r_R,bneq
    
    ld      *sp(3),b
    and     #0fff0h,b
    bc      L_shr_r_DO,beq
    
    ld      a,8,a
    bc      L_shr_r_O,aov
    ld      a,8,a
    bc      L_shr_r_O,aov
    
    ld      *sp(3),b
    sub     #10h,b
    stl     b,*sp(3)
    and     #0fff0h,b
    bc      L_shr_r_DO,beq
    ld      a,8,a
    ld      a,7,a
    b       L_shr_r_O
    
L_shr_r_DO:    
    ld      *sp(3),b
    and     #0fff8h,b
    bc      L_shr_r_FDO,beq
    
    ld      a,8,a
    bc      L_shr_r_O,aov
    ld      *sp(3),b
    sub     #8h,b
    stl     b,*sp(3) 
L_shr_r_FDO:    
    ld      *sp(3),asm
    ld      a,asm,a
    bc      L_shr_r_O,aov
    b       L_shr_r_E
L_shr_r_R:    
    ld      *sp(3),b
    and     #0fff0h,b
    xor     #0fff0h,b
    bc      L_shr_r_RDO,beq
    
    and     #4000h,1,a,b
    ld      b,-15,b
    stlm    b,t
 
    ld      a,-16,a
                
    addm    #10h,*sp(3)
    
    ld      *sp(3),b
    and     #0fff0h,b
    xor     #0fff0h,b
    bc      L_shr_r_RDO,beq
    ld      #0,a
    b       L_shr_r_E
L_shr_r_RDO:
    ld      *sp(3),b
    neg     b
    sub     #1,b
    frame   -1
    nop
    nop
    stl      b,*sp(0)
    ld      *sp(0),asm
    
    ld      #1,b
    frame   1
    ld      b,asm,b
    and     a,b
    stm     #0,t
    bc      L_shr_r_Z,beq
    stm     #1,t  
    
L_shr_r_Z:      
    ld      *sp(3),asm
    ld      a,asm,a
    
    ldm     t,b
    add     b,a
    b       L_shr_r_E  
L_shr_r_O:
    st      #1,*(_Overflow)         
L_shr_r_E:
    POPM    ST1
    POPM    ST0
    RET   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Word32 L_abs(Word32 L_var1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_L_abs:    
    PSHM    ST0
    PSHM    ST1
    RSBX    OVA
    RSBX    OVB
    
    ssbx	sxm
    ssbx	ovm	  
    
    abs     a
    
    POPM    ST1
    POPM    ST0
    RET  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Word32 L_sat (Word32 L_var1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_L_sat:
    PSHM    ST0
    PSHM    ST1
    
    ssbx	sxm
    
    ld      *(_Overflow),b
    bc      L_sat_E,beq
    ld      #7fffh,15,a
    ld      a,1,a
    or      #0ffffh,a
    ld      *(_Carry),b
    bc      L_sat_NC,beq
    ld      #8000h,15,a
    ld      a,1,a
L_sat_NC:
    st      #0h,*(_Overflow)
    st      #0h,*(_Carry)
L_sat_E:
    POPM    ST1
    POPM    ST0
    RET   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Word16 norm_s(Word16 var1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_norm_s:
    PSHM    ST0
    PSHM    ST1
    
    ssbx    c16
    ssbx	sxm
    ssbx	ovm
    
    exp     a
    nop
    
    ldm     t,a
    sub     #10h,a
        
    POPM    ST1
    POPM    ST0
    RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Word16 div_s(Word16 var1, Word16 var2)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_div_s:
    PSHM    ST0
    PSHM    ST1
    RSBX    OVA
    RSBX    OVB
    ssbx    sxm
    st      #0,*(_Error)

    ;and     #4000h,1,a,b
    bc      div_s_Er1,alt
    ld      *sp(3),b
    ;and     #4000h,1,b
    bc      div_s_Er1,bleq
    ld      a,b
    sub     *sp(3),b
    bc      div_s_P,bleq
div_s_Er1:
    st      #1,*(_Error)
    b       div_s_E
div_s_P:
    ld      a,15,a
    ld      a,1,a
    rpt     #14
    subc    *sp(3),a
div_s_E:    
    POPM    ST1
    POPM    ST0
    RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Word16 norm_l(Word32 L_var1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_norm_l:
    PSHM    ST0
    PSHM    ST1
    
    ssbx	sxm
    ssbx	ovm
    
    exp     a
    nop
    
    ldm     t,a
        
    POPM    ST1
    POPM    ST0
    RET
    
     .end
    
    
    
    

⌨️ 快捷键说明

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