codei86.asm

来自「开放源码的编译器open watcom 1.6.0版的源代码」· 汇编 代码 · 共 1,210 行 · 第 1/3 页

ASM
1,210
字号
        db      "#define S_strcmp_ret    HW_D( HW_AX )",0
        db      "#define S_strcmp_parms  P_SI_DI",0
        db      "#define S_strcmp_saves  HW_NotD_3( HW_AX, HW_SI, HW_DI )",0
        db      0
beginb  S_strcmp
        _loop
          LODSB
          MOV   AH,Byte Ptr [DI]
          SUB   AL,AH
          JNZ   E_S_strcmp1
          INC   DI
          CMP   AL,AH
        _until e
E_S_strcmp1:
        SBB     AH,AH
endb    S_strcmp

defsb   C_strcmp
        db      "/* ax strcmp( si, di ) zaps ax,es,si,di,cx */",0
        db      "#define C_strcmp_ret    HW_D( HW_AX )",0
        db      "#define C_strcmp_parms  P_SI_DI",0
        db      "#define C_strcmp_saves  HW_NotD_5( HW_AX, HW_ES, HW_SI, HW_DI, HW_CX )",0
        db      0
beginb  C_strcmp
        MOV     AX,DS
        MOV     ES,AX
        CMPSB
        JNZ     E_C_strcmp1
        DEC     DI
        DEC     SI
        MOV     CX,-1
        XOR     AX,AX
        REPNZ   SCASB
        NOT     CX
        SUB     DI,CX
        REPZ    CMPSB
        JZ      E_C_strcmp
E_C_strcmp1:
        SBB     AX,AX
        SBB     AX,-1
endb    C_strcmp

defsb   ZF_strcmp
        db      "/* ax strcmp( ds:si, es:di ) zaps ax,si,di */",0
        db      "#define ZF_strcmp_ret    HW_D( HW_AX )",0
        db      "#define ZF_strcmp_parms  P_DSSI_ESDI",0
        db      "#define ZF_strcmp_saves  HW_NotD_3( HW_AX, HW_SI, HW_DI )",0
        db      0
beginb  ZF_strcmp
        _loop
          LODSB
          MOV   AH,Byte Ptr ES:[DI]
          SUB   AL,AH
          JNZ   E_ZF_strcmp1
          INC   DI
          CMP   AL,AH
        _until e
E_ZF_strcmp1:
        SBB     AH,AH
endb    ZF_strcmp

defsb   ZP_strcmp
        db      "/* ax strcmp( si:ax, es:di ) zaps ax,si,di */",0
        db      "#define ZP_strcmp_ret    HW_D( HW_AX )",0
        db      "#define ZP_strcmp_parms  P_SIAX_ESDI",0
        db      "#define ZP_strcmp_saves  HW_NotD_3( HW_AX, HW_SI, HW_DI )",0
        db      0
beginb  ZP_strcmp
        PUSH    DS
        XCHG    AX,SI
        MOV     DS,AX
        _loop
          LODSB
          MOV   AH,Byte Ptr ES:[DI]
          SUB   AL,AH
          JNZ   E_ZP_strcmp1
          INC   DI
          CMP   AL,AH
        _until e
E_ZP_strcmp1:
        SBB     AH,AH
        POP     DS
endb    ZP_strcmp

defsb   DF_strcmp
        db      "/* cx strcmp( ds:si, es:di ) zaps ax,si,di,cx */",0
        db      "#define DF_strcmp_ret   HW_D( HW_CX )",0
        db      "#define DF_strcmp_parms P_DSSI_ESDI",0
        db      "#define DF_strcmp_saves HW_NotD_4( HW_AX, HW_SI, HW_DI, HW_CX )",0
        db      0
beginb  DF_strcmp
        CMPSB
        JNZ     E_DF_strcmp1
        DEC     DI
        DEC     SI
        MOV     CX,-1
        XOR     AX,AX
        REPNZ   SCASB
        NOT     CX
        SUB     DI,CX
        REPZ    CMPSB
        JZ      E_DF_strcmp
E_DF_strcmp1:
        SBB     CX,CX
        SBB     CX,-1
endb    DF_strcmp

defsb   DP_strcmp
        db      "/* cx strcmp( si:ax, es:di ) zaps ax,si,di,cx */",0
        db      "#define DP_strcmp_ret   HW_D( HW_CX )",0
        db      "#define DP_strcmp_parms P_SIAX_ESDI",0
        db      "#define DP_strcmp_saves HW_NotD_4( HW_AX, HW_SI, HW_DI, HW_CX )",0
        db      0
beginb  DP_strcmp
        PUSH    DS
        XCHG    AX,SI
        MOV     DS,AX
        CMPSB
        JNZ     E_DP_strcmp1
        DEC     DI
        DEC     SI
        MOV     CX,-1
        XOR     AX,AX
        REPNZ   SCASB
        NOT     CX
        SUB     DI,CX
        REPZ    CMPSB
        JZ      E_DP_strcmp2
E_DP_strcmp1:
        SBB     CX,CX
        SBB     CX,-1
E_DP_strcmp2:
        POP     DS
endb    DP_strcmp

defsb   C_strlen
        db      "/* cx strlen( di ) zaps ax,es,cx,di */",0
        db      "#define C_strlen_ret    HW_D( HW_CX )",0
        db      "#define C_strlen_parms  P_DI",0
        db      "#define C_strlen_saves  HW_NotD_4( HW_AX, HW_ES, HW_CX, HW_DI )",0
        db      0
beginb  C_strlen
        MOV     AX,DS
        MOV     ES,AX
        MOV     CX,-1
        XOR     AX,AX
        REPNZ   SCASB
        NOT     CX
        DEC     CX
endb    C_strlen

defsb   DF_strlen
        db      "/* cx strlen( es:di ) zaps ax,cx,di */",0
        db      "#define DF_strlen_ret   HW_D( HW_CX )",0
        db      "#define DF_strlen_parms P_ESDI",0
        db      "#define DF_strlen_saves HW_NotD_3( HW_AX, HW_CX, HW_DI )",0
        db      0
beginb  DF_strlen
        MOV     CX,-1
        XOR     AX,AX
        REPNZ   SCASB
        NOT     CX
        DEC     CX
endb    DF_strlen

defsb   DP_strlen
        db      "/* cx strlen( es:di ) zaps ax,cx,di */",0
        db      "#define DP_strlen_ret   HW_D( HW_CX )",0
        db      "#define DP_strlen_parms P_ESDI",0
        db      "#define DP_strlen_saves HW_NotD_3( HW_AX, HW_CX, HW_DI )",0
        db      0
beginb  DP_strlen
        MOV     CX,-1
        XOR     AX,AX
        REPNZ   SCASB
        NOT     CX
        DEC     CX
endb    DP_strlen

defsb   C_abs
        db      "#define C_abs_ret    HW_D( HW_AX )",0
        db      "#define C_abs_parms  P_AX",0
        db      "#define C_abs_saves  HW_NotD_2( HW_AX, HW_DX )",0
        db      0
beginb  C_abs
        CWD
        XOR     AX,DX
        SUB     AX,DX
endb    C_abs

defsb   C_labs
        db      "#define C_labs_ret    HW_D_2( HW_AX, HW_DX )",0
        db      "#define C_labs_parms  P_AXDX",0
        db      "#define C_labs_saves  HW_NotD_2( HW_AX, HW_DX )",0
        db      0
beginb  C_labs
        OR      DX,DX
        JGE     E_C_labs
        NEG     AX
        ADC     DX,0
        NEG     DX
endb    C_labs

defsb   C_inp
        db      "#define C_inp_ret    HW_D( HW_AX )",0
        db      "#define C_inp_parms  P_DX",0
        db      "#define C_inp_saves  HW_NotD( HW_AX )",0
        db      0
beginb  C_inp
        IN      AL,DX
        SUB     AH,AH
endb    C_inp

defsb   C_inpw
        db      "#define C_inpw_ret    HW_D( HW_AX )",0
        db      "#define C_inpw_parms  P_DX",0
        db      "#define C_inpw_saves  HW_NotD( HW_AX )",0
        db      0
beginb  C_inpw
        IN      AX,DX
endb    C_inpw

defsb   C_outp
        db      "#define C_outp_ret    HW_D( HW_AX )",0
        db      "#define C_outp_parms  P_DX_AL",0
        db      "#define C_outp_saves  HW_NotD( HW_EMPTY )",0
        db      0
beginb  C_outp
        OUT     DX,AL
endb    C_outp

defsb   C_outpw
        db      "#define C_outpw_ret    HW_D( HW_AX )",0
        db      "#define C_outpw_parms  P_DX_AX",0
        db      "#define C_outpw_saves  HW_NotD( HW_EMPTY )",0
        db      0
beginb  C_outpw
        OUT     DX,AX
endb    C_outpw

defsb   C_movedata
        db      "#define C_movedata_ret    HW_D( HW_EMPTY )",0
        db      "#define C_movedata_parms  P_AX_SI_ES_DI_CX",0
        db      "#define C_movedata_saves  HW_NotD_3( HW_CX, HW_SI, HW_DI )",0
        db      0
beginb  C_movedata
        PUSH    DS
        MOV     DS,AX
        SHR     CX,1
        REP     MOVSW
        ADC     CX,CX
        REP     MOVSB
        POP     DS
endb    C_movedata

defsb   C_enable
        db      "#define C_enable_ret    HW_D( HW_EMPTY )",0
        db      "#define C_enable_parms  P_AX",0
        db      "#define C_enable_saves  HW_NotD( HW_EMPTY )",0
        db      0
beginb  C_enable
        STI
        CLD
endb    C_enable

defsb   C_disable
        db      "#define C_disable_ret    HW_D( HW_EMPTY )",0
        db      "#define C_disable_parms  P_AX",0
        db      "#define C_disable_saves  HW_NotD( HW_EMPTY )",0
        db      0
beginb  C_disable
        CLI
endb    C_disable

defsb   C_rotl
        db      "#define C_rotl_ret    HW_D( HW_AX )",0
        db      "#define C_rotl_parms  P_AX_CX",0
        db      "#define C_rotl_saves  HW_NotD( HW_AX )",0
        db      0
beginb  C_rotl
        ROL     AX,CL
endb    C_rotl

defsb   C_rotr
        db      "#define C_rotr_ret    HW_D( HW_AX )",0
        db      "#define C_rotr_parms  P_AX_CX",0
        db      "#define C_rotr_saves  HW_NotD( HW_AX )",0
        db      0
beginb  C_rotr
        ROR     AX,CL
endb    C_rotr

defsb   C_fabs
        db      "#define C_fabs_ret    HW_D( HW_ABCD )",0
        db      "#define C_fabs_parms  P_AXBXCXDX",0
        db      "#define C_fabs_saves  HW_NotD( HW_ABCD )",0
        db      0
beginb  C_fabs
        AND     AH,7Fh
endb    C_fabs

defsb   C_min
        db      "#define C_min_ret   HW_D( HW_AX )",0
        db      "#define C_min_parms P_AX_DX",0
        db      "#define C_min_saves HW_NotD_2( HW_CX, HW_AX )",0
        db      0
beginb  C_min
        SUB     AX,DX
        SBB     CX,CX
        AND     AX,CX
        ADD     AX,DX
endb    C_min

defsb   C_max
        db      "#define C_max_ret   HW_D( HW_AX )",0
        db      "#define C_max_parms P_AX_DX",0
        db      "#define C_max_saves HW_NotD_2( HW_CX, HW_AX )",0
        db      0
beginb  C_max
        SUB     AX,DX
        CMC
        SBB     CX,CX
        AND     AX,CX
        ADD     AX,DX
endb    C_max


func    macro   name
        dw      _&name&_defs - module_start
        dw      _&name&_name - module_start
        dw      _&name - module_start
        endm

        public  _Functions

_Functions:
        func    C_strcpy
        func    S_strcpy
        func    ZF_strcpy
        func    ZP_strcpy
        func    DF_strcpy
        func    DP_strcpy
        func    C_strcat
        func    S_strcat
        func    ZF_strcat
        func    ZP_strcat
        func    DF_strcat
        func    DP_strcat
        func    C_strchr
        func    DF_strchr
        func    DP_strchr
        func    C_memset
        func    S_memset
        func    ZF_memset
        func    ZP_memset
        func    DF_memset
        func    DP_memset
        func    C_memcpy
        func    S_memcpy
        func    ZF_memcpy
        func    ZP_memcpy
        func    DF_memcpy
        func    DP_memcpy

        func    C_div
        func    DF_stosw
        func    DF_stoswb
        func    C_memcmp
        func    DF_memcmp
        func    DP_memcmp
        func    C_memchr
        func    DF_memchr
        func    DP_memchr
        func    S_strcmp
        func    C_strcmp
        func    ZF_strcmp
        func    ZP_strcmp
        func    DF_strcmp
        func    DP_strcmp
        func    C_strlen
        func    DF_strlen
        func    DP_strlen
        func    C_abs
        func    C_labs
        func    C_inp
        func    C_inpw
        func    C_outp
        func    C_outpw
        func    C_movedata
        func    C_enable
        func    C_disable
        func    C_rotl
        func    C_rotr
        func    C_fabs
        func    C_min
        func    C_max

        dw      0,0,0
_DATA   ends

        end

⌨️ 快捷键说明

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