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

📄 myclib.msa

📁 Actions ucOS-II mp3方案源码,可以做参考
💻 MSA
📖 第 1 页 / 共 5 页
字号:
    or      a
UL_RSH_L03_0
    ret     z
    cp      8
    jr      c,UL_RSH_L03_1
    ld      l,h
    ld      h,c
    ld      c,b
    ld      b,0
    sub     8
    jr      UL_RSH_L03_0    
UL_RSH_L03_1        
    srl     b
    rr      c
    rr      h
    rr      l
    dec     a
    jr      nz,UL_RSH_L03_1
    ret

//mod and div
//added by fqliu 20040301


/******************************************************************************/
?C_DIVMOD_L01:    //----------------------//
    ld    de,9
C_DIVMOD_L01_0    
    rl    c
    dec    e
    ret    z
    rl    d
    ld    a,d
    sub    b
    jr    c,C_DIVMOD_L01_0
    ld    d,a
    jr    C_DIVMOD_L01_0
    
/******************************************************************************/
?S_DIVMOD_L02:    //----------------------//
    ld    hl,0
    ld    a,11h
S_DIVMOD_L02_0
    rl    e
    rl    d
    dec    a
    ret    z
    rl    l
    rl    h
    sbc    hl,bc
    jr    nc,S_DIVMOD_L02_0
    add    hl,bc
    jr    S_DIVMOD_L02_0
    
/******************************************************************************/
?L_DIVMOD_L03:    //----------------------//
    push    af
    ld    hl,0
    ld    bc,0
    ld    (ix-8),21h
    jr    L_DIVMOD_L03_0
L_DIVMOD_L03_2    
    add    hl,de
    scf
L_DIVMOD_L03_0    
    rl    (ix-4)
    rl    (ix-3)
    rl    (ix-2)
    rl    (ix-1)
    dec    (ix-8)
    jr    z,L_DIVMOD_L03_1
    rl    c
    rl    b
    rl    l
    rl    h
    sbc    hl,de
    jr    c,L_DIVMOD_L03_2
    jr    nz,L_DIVMOD_L03_3
    ld    a,b
    sub    (ix+7)
    jr    c,L_DIVMOD_L03_2
    jr    nz,L_DIVMOD_L03_3
    ld    a,c
    sub    (ix+6)
    jr    c,L_DIVMOD_L03_2
    jr    L_DIVMOD_L03_4
L_DIVMOD_L03_3    
    ld    a,c
    sub    (ix+6)
L_DIVMOD_L03_4    
    ld    c,a
    ld    a,b
    sbc    a,(ix+7)
    ld    b,a
    jr    nc,L_DIVMOD_L03_0
    dec    hl
    and    a
    jr    L_DIVMOD_L03_0
L_DIVMOD_L03_1    
    pop    af
    push    hl
    ld    h,b
    ld    l,c
    pop    bc
    ret        

/******************************************************************************/
?C_FIND_SIGN_L01:    //----------------------//
    bit    7,b
    jr    z,C_FIND_SIGN_L01_0
    xor    a
    sub    b
    ld    b,a
    ld    a,1
C_FIND_SIGN_L01_0
    bit    7,c
    ret    z
    push    af
    xor    a
    sub    c
    ld    c,a
    pop    af
    xor    1
    ret        

/******************************************************************************/
?L_INC_L03:    //----------------------//
    inc    l
    ret    nz
    inc    h
    ret    nz
    inc    c
    ret    nz
    inc    b
    ret

/******************************************************************************/
?L_NOT_L03:    //----------------------//
    push    af
    ld    a,l
    cpl
    ld    l,a
    ld    a,h
    cpl
    ld    h,a
    ld    a,c
    cpl
    ld    c,a
    ld    a,b
    cpl
    ld    b,a
    pop    af
    ret
    
/******************************************************************************/
?L_FIND_SIGN_L03:    //----------------------//
    bit    7,d
    jr    z,L_FIND_SIGN_L03_0
    ld    b,d
    ld    c,e
    ld    h,(ix+7)
    ld    l,(ix+6)
    call    ?L_NOT_L03
    call    ?L_INC_L03
    ld    d,b
    ld    e,c
    ld    (ix+7),h
    ld    (ix+6),l
    ld    a,1
L_FIND_SIGN_L03_0    
    bit    7,(ix-1)
    ret    z
    push    af
    ld    b,(ix-1)
    ld    c,(ix-2)        
    ld    h,(ix-3)
    ld    l,(ix-4)
    call    ?L_NOT_L03
    call    ?L_INC_L03
    ld    (ix-1),b
    ld    (ix-2),c
    ld    (ix-3),h
    ld    (ix-4),l
    pop    af
    xor    1
    ret
    
/******************************************************************************/
?UC_MOD_L01:    //----------------------//
    push    bc
    push    de
    ld    c,a
    call    ?C_DIVMOD_L01
    ld    a,d
    pop    de
    pop    bc
    ret

/******************************************************************************/
?SC_MOD_L01:    //----------------------//
    push    bc
    push    de
    ld    c,a
    ld    a,1
    call    ?C_FIND_SIGN_L01
    push    af
    call    ?C_DIVMOD_L01
    pop    af
    or    a
    ld    a,d
    jr    nz,SC_MOD_L01_0
    neg
SC_MOD_L01_0    
    pop    de
    pop    bc
    ret    

/******************************************************************************/
?SS_MOD_L02:    //----------------------//
    push    af
    push    hl
    push    bc
    ld    a,1
    call    ?S_FIND_SIGN_L02
    push    af
    call    ?S_DIVMOD_L02
    pop    af
    ex    de,hl
    or    a
    jr    nz,SS_MOD_L02_0
    xor    a
    sub    e
    ld    e,a
    ld    a,0
    sbc    a,d
    ld    d,a
SS_MOD_L02_0
    pop    bc
    pop    hl
    pop    af
    ret    

/******************************************************************************/
?SS_MODASG_L02:        //----------------------//
    ld    e,(hl)
    inc    hl
    ld    d,(hl)
    call    ?SS_MOD_L02
    ld    (hl),d
    dec    hl
    ld    (hl),e
    ret

/******************************************************************************/
?US_MOD_L02:        //----------------------//
    push    af
    push    hl
    call    ?S_DIVMOD_L02
    ex    de,hl
    pop    hl
    pop    af
    ret

/******************************************************************************/
?US_MODASG_L02:        //----------------------//
    LD    e,(hl)
    inc    hl
    ld    d,(hl)
    call    ?US_MOD_L02
    ld    (hl),d
    dec    hl
    ld    (hl),e
    ret

/******************************************************************************/
?SL_MOD_L03:        //----------------------//
    ex    de,hl
    ex    (sp),hl
    push    af
    push    ix
    ld    ix,0
    add    ix,sp
    push    bc
    push    de
    ld    d,(ix+9)
    ld    (ix+9),h
    ld    e,(ix+8)
    ld    (ix+8),l
    ld    a,1
    call    ?L_FIND_SIGN_L03
    call    ?L_DIVMOD_L03
    or    a
    jr    nz,SL_MOD_L03_0
    call    ?L_NOT_L03
    call    ?L_INC_L03
SL_MOD_L03_0    
    ld    sp,ix
    pop    ix
    pop    af
    pop    de
    inc    sp
    inc    sp
    ret
    
/******************************************************************************/
?SL_MODASG_L03:        //----------------------//
    push    bc
    push    de
    ld    e,(hl)
    inc    hl
    ld    d,(hl)
    inc    hl
    ld    c,(hl)
    inc    hl
    ld    b,(hl)
    ex    de,hl
    call    ?SL_MOD_L03
    call    ?L_END_MULDIVASG_L03
    ret

/******************************************************************************/
?UL_MOD_L03:        //----------------------//
    ex    de,hl
    ex    (sp),hl
    push    af
    push    ix
    ld    ix,0
    add    ix,sp
    push    bc
    push    de
    ld    d,(ix+9)
    ld    (ix+9),h
    ld    e,(ix+8)
    ld    (ix+8),l
    call    ?L_DIVMOD_L03    
    ld    sp,ix
    pop    ix
    pop    af
    pop    de
    inc    sp
    inc    sp
    ret
    
/******************************************************************************/
?UL_MODASG_L03:        //----------------------//
    push    bc
    push    de
    ld    e,(hl)
    inc    hl
    ld    d,(hl)
    inc    hl
    ld    c,(hl)
    inc    hl
    ld    b,(hl)
    ex    de,hl
    call    ?UL_MOD_L03
    call    ?L_END_MULDIVASG_L03
    ret

/******************************************************************************/
?BF_UC_MODASG_L10:        //----------------------//
    ex    de,hl
    ex    (sp),hl
    push    bc
    push    de
    ld    e,(hl)
    inc    hl
    ld    d,(hl)
    inc    hl
    ex    (sp),hl
    push    af
    call    ?BF_UC_LD_SHIFT_DOWN_L10
    call    ?UC_MOD_L01
    call    ?BF_C_SHIFT_UP_L10
    JP    ?BF_C_RET_VAL_L10

/******************************************************************************/
?BF_SC_EXT_L10:  //----------------------//
    ld    b,80h
BF_SC_EXT_L10_1    
    ld    a,d
    and    b
    jr    nz,BF_SC_EXT_L10_0
    sra    b
    jr    BF_SC_EXT_L10_1
BF_SC_EXT_L10_0    
    ld    a,c
    and    b
    ret    z
    ld    a,c
    or    b
    ld    c,a
    ret

/******************************************************************************/
?BF_UC_LD_SHIFT_DOWN_L10:        //----------------------//
    ld    b,a
    push    bc
    ld    a,(hl)
    and    d
    ld    c,a
    ld    a,e
    and    7
    ld    b,a
    ld    a,c
    call    ?UC_RSH_L01
    pop    bc
    ret

/******************************************************************************/
?BF_C_SHIFT_UP_L10:        //----------------------//
    ld    c,a
    ld    a,e
    and    7
    ld    b,a
    ld    a,c
    jp    ?C_LSH_L01
    
/******************************************************************************/
?BF_C_RET_VAL_L10:        //----------------------//
    and    d
    ld    c,a
    ld    a,d
    cpl
    and    (hl)
    or    c
    ld    (hl),a
    bit    7,e
    jr    z,BF_C_RET_VAL_L10_0
    bit    6,e
    call    nz,?BF_SC_EXT_L10
    ld    a,e
    and    7
    ld    b,a
    ld    a,c
    bit    6,e
    jr    z,BF_C_RET_VAL_L10_1
    call    ?SC_RSH_L01
    pop    de
    jp    BF_C_RET_VAL_L10_2
BF_C_RET_VAL_L10_1
    call    ?UC_RSH_L01
    pop    de
    jp    BF_C_RET_VAL_L10_2
BF_C_RET_VAL_L10_0
    pop    af    
BF_C_RET_VAL_L10_2    
    pop    de
    pop    bc
    ex    de,hl
    ex    (sp),hl
    ex    de,hl
    ret
    
/******************************************************************************/
?BF_SS_MODASG_L10:        //----------------------//
    ex     de,hl
    ex     (sp),hl
    push   ix
    push   de
    push   hl
    pop    ix
    inc    hl
    inc    hl
    inc    hl
    ex     (sp),hl
    push   hl
    push   af
    push   bc
    call   ?BF_SS_LD_SHIFT_DOWN_L10
    call   ?SS_MOD_L02
    call   ?BF_S_SHIFT_UP_L10
    Jp     ?BF_S_RET_VAL_L10
    
/******************************************************************************/
?BF_SS_EXT_L10:  //----------------------//
    push    hl
    push    bc
    ld    L,(ix+1)
    ld    h,(ix+2)
    ld    b,80h
    ld    c,0
BF_SS_EXT_L10_1
    ld    a,h
    and    b
    jr    nz,BF_SS_EXT_L10_0
    ld    a,l
    and    c
    jr    nz,BF_SS_EXT_L10_0
    sra    b
    rr    c
    jr    BF_SS_EXT_L10_1
BF_SS_EXT_L10_0
    ld    a,d
    and    h    
    and    b
    jr    nz,BF_SS_EXT_L10_2
    ld    a,e
    and    l
    and    c
    jr    z,BF_SS_EXT_L10_3
    ld    a,e
    or    c
    ld    e,a
BF_SS_EXT_L10_2
    ld    a,d
    or    b
    ld    d,a
BF_SS_EXT_L10_3    
    pop    bc
    pop    hl
    ret

/******************************************************************************/
?BF_MASKED_LD_L10:        //----------------------//
    ld    a,(hl)
    and    (ix+1)
    ld    e,a
    inc    hl
    ld    a,(hl)
    and    (ix+2)
    ld    d,a
    ret
    
/******************************************************************************/
?BF_SS_LD_SHIFT_DOWN_L10:        //----------------------//
    push    bc
    call    ?BF_MASKED_LD_L10
    call    ?BF_SS_EXT_L10
    ld    a,(ix+0)
    and    0fh
    ld    b,a
    call    ?SS_RSH_L02
    pop    bc
    ret

/******************************************************************************/
?BF_US_LD_SHIFT_DOWN_L10:        //----------------------//
    push    bc
    call    ?BF_MASKED_LD_L10
    ld    a,(ix+0)
    and    0fh
    ld    b,a
    call    ?US_RSH_L02
    pop    bc
    ret

/******************************************************************************/
?BF_S_SHIFT_UP_L10:        //----------------------//
    ld    a,(ix+0)
    and    0fh
    ld    b,a
    jp    ?S_LSH_L02

/******************************************************************************/

⌨️ 快捷键说明

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