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

📄 codei86.asm

📁 Open Watcom 的 C 编译器源代码
💻 ASM
📖 第 1 页 / 共 3 页
字号:
  db    "#define C_memset_parms P_DI_AL_CX",0
  db    "#define C_memset_saves HW_NotD_3( HW_ES, HW_AH, HW_CX )",0
  db    0

_C_memset:
        db      E_C_memset - _C_memset - 1
        push    di                      ; save destination address
        push    ds                      ; set ES=DS
        pop     es                      ; ...
        mov     ah,al                   ; duplicate byte to store in high byte
        shr     cx,1                    ; calc. number of words to store
        rep     stosw                   ; store words
        adc     cx,cx                   ; see if 1 more byte to do
        rep     stosb                   ; do repeat store
        pop     di                      ; restore destination address
E_C_memset:


        public  _ZF_memset
_ZF_memset_name:        db      "ZF_memset",0
_ZF_memset_defs:
  db    "/* es:di memset( es:di, al, cx ) zaps cx */",0
  db    "#define ZF_memset_ret   HW_D_2( HW_ES, HW_DI )",0
  db    "#define ZF_memset_parms  P_ESDI_AL_CX",0
  db    "#define ZF_memset_saves  HW_NotD( HW_CX )",0
  db    0

_ZF_memset:
        db      E_ZF_memset - _ZF_memset - 1
        push    di                      ; save destination address
        rep     stosb                   ; do repeat store
        pop     di                      ; restore destination address
E_ZF_memset:


        public  _ZP_memset
_ZP_memset_name:        db      "ZP_memset",0
_ZP_memset_defs:
  db    "/* es:di memset( es:di, al, cx ) zaps cx */",0
  db    "#define ZP_memset_ret   HW_D_2( HW_ES, HW_DI )",0
  db    "#define ZP_memset_parms P_ESDI_AL_CX",0
  db    "#define ZP_memset_saves HW_NotD( HW_CX )",0
  db    0

_ZP_memset:
        db      E_ZP_memset - _ZP_memset - 1
        push    di                      ; save destination address
        rep     stosb                   ; do repeat store
        pop     di                      ; restore destination address
E_ZP_memset:


        public  _DF_memset
_DF_memset_name:        db      "DF_memset",0
_DF_memset_defs:
  db    "/* es:di memset( es:di, al, cx ) zaps ah,cx */",0
  db    "#define DF_memset_ret  HW_D_2( HW_ES, HW_DI )",0
  db    "#define DF_memset_parms P_ESDI_AL_CX",0
  db    "#define DF_memset_saves  HW_NotD_2( HW_AH, HW_CX )",0
  db    0

_DF_memset:
        db      E_DF_memset - _DF_memset - 1
        push    di                      ; save destination address
        mov     ah,al                   ; duplicate byte to store in high byte
        shr     cx,1                    ; calc. number of words to store
        rep     stosw                   ; store words
        adc     cx,cx                   ; see if 1 more byte to do
        rep     stosb                   ; do repeat store
        pop     di                      ; restore destination address
E_DF_memset:


        public  _DP_memset
_DP_memset_name:        db      "DP_memset",0
_DP_memset_defs:
  db    "/* es:di memset( es:di, al, cx ) zaps ah,cx */",0
  db    "#define DP_memset_ret   HW_D_2( HW_ES, HW_DI )",0
  db    "#define DP_memset_parms P_ESDI_AL_CX",0
  db    "#define DP_memset_saves HW_NotD_2( HW_AH, HW_CX )",0
  db    0

_DP_memset:
        db      E_DP_memset - _DP_memset - 1
        push    di                      ; save destination address
        mov     ah,al                   ; duplicate byte to store in high byte
        shr     cx,1                    ; calc. number of words to store
        rep     stosw                   ; store words
        adc     cx,cx                   ; see if 1 more byte to do
        rep     stosb                   ; do repeat store
        pop     di                      ; restore destination address
E_DP_memset:
;=======================================================================

        public  _S_memcpy
_S_memcpy_name: db      "S_memcpy",0
_S_memcpy_defs:
  db    "/* di memcpy( di, si, cx ) zaps es,si,cx */",0
  db    "#define S_memcpy_ret   HW_D( HW_DI )",0
  db    "#define S_memcpy_parms P_DI_SI_CX",0
  db    "#define S_memcpy_saves  HW_NotD_3( HW_ES, HW_SI, HW_CX )",0
  db    0

_S_memcpy:
        db      E_S_memcpy - _S_memcpy - 1
        push    di                      ; save destination address
        push    ds                      ; set ES=DS
        pop     es                      ; ...
        rep     movsb                   ; do repeat move
        pop     di                      ; restore destination address
E_S_memcpy:


        public  _C_memcpy
_C_memcpy_name: db      "C_memcpy",0
_C_memcpy_defs:
  db    "/* di memcpy( di, si, cx ) zaps ax,es,si,cx */",0
  db    "#define C_memcpy_ret   HW_D( HW_DI )",0
  db    "#define C_memcpy_parms P_DI_SI_CX",0
  db    "#define C_memcpy_saves  HW_NotD_4( HW_AX, HW_ES, HW_SI, HW_CX )",0
  db    0

_C_memcpy:
        db      E_C_memcpy - _C_memcpy - 1
        push    di                      ; save destination address
        mov     ax,ds                   ; set ES=DS
        mov     es,ax                   ; ...
        shr     cx,1                    ; calc. number of words to move
        rep     movsw                   ; move words
        adc     cx,cx                   ; see if 1 more byte to do
        rep     movsb                   ; do repeat move
        pop     di                      ; restore destination address
E_C_memcpy:


        public  _ZF_memcpy
_ZF_memcpy_name:        db      "ZF_memcpy",0
_ZF_memcpy_defs:
  db    "/* es:di memcpy( es:di, ds:si, cx ) zaps cx,si */",0
  db    "#define ZF_memcpy_ret   HW_D_2( HW_ES, HW_DI )",0
  db    "#define ZF_memcpy_parms  P_ESDI_DSSI_CX",0
  db    "#define ZF_memcpy_saves   HW_NotD_2( HW_SI, HW_CX )",0
  db    0

_ZF_memcpy:
        db      E_ZF_memcpy - _ZF_memcpy - 1
        push    di                      ; save destination address
        rep     movsb                   ; do repeat move
        pop     di                      ; restore destination address
E_ZF_memcpy:


        public  _ZP_memcpy
_ZP_memcpy_name:        db      "ZP_memcpy",0
_ZP_memcpy_defs:
  db    "/* es:di memcpy( es:di, cx:si, ax ) zaps cx,si,ax */",0
  db    "#define ZP_memcpy_ret   HW_D_2( HW_ES, HW_DI )",0
  db    "#define ZP_memcpy_parms  P_ESDI_CXSI_AX",0
  db    "#define ZP_memcpy_saves  HW_NotD_3( HW_SI, HW_CX, HW_AX )",0
  db    0

_ZP_memcpy:
        db      E_ZP_memcpy - _ZP_memcpy - 1
        push    ds                      ; save DS
        push    di                      ; save destination address
        xchg    cx,ax                   ; move count to CX, segment to AX
        mov     ds,ax                   ; load segment
        rep     movsb                   ; do repeat move
        pop     di                      ; restore destination address
        pop     ds                      ; restore DS
E_ZP_memcpy:


        public  _DF_memcpy
_DF_memcpy_name:        db      "DF_memcpy",0
_DF_memcpy_defs:
  db    "/* es:di memcpy( es:di, ds:si, cx ) zaps cx,si */",0
  db    "#define DF_memcpy_ret  HW_D_2( HW_ES, HW_DI )",0
  db    "#define DF_memcpy_parms P_ESDI_DSSI_CX",0
  db    "#define DF_memcpy_saves  HW_NotD_2( HW_SI, HW_CX )",0
  db    0

_DF_memcpy:
        db      E_DF_memcpy - _DF_memcpy - 1
        push    di                      ; save destination address
        shr     cx,1                    ; calc. number of words to move
        rep     movsw                   ; move words
        adc     cx,cx                   ; see if 1 more byte to do
        rep     movsb                   ; do repeat move
        pop     di                      ; restore destination address
E_DF_memcpy:


        public  _DP_memcpy
_DP_memcpy_name:        db      "DP_memcpy",0
_DP_memcpy_defs:
  db    "/* es:di memcpy( es:di, cx:si, ax ) zaps cx,si,ax */",0
  db    "#define DP_memcpy_ret  HW_D_2( HW_ES, HW_DI )",0
  db    "#define DP_memcpy_parms P_ESDI_CXSI_AX",0
  db    "#define DP_memcpy_saves HW_NotD_3( HW_SI, HW_CX, HW_AX )",0
  db    0

_DP_memcpy:
        db      E_DP_memcpy - _DP_memcpy - 1
        push    ds                      ; save DS
        push    di                      ; save destination address
        xchg    cx,ax                   ; move count to CX, segment to AX
        mov     ds,ax                   ; load segment
        shr     cx,1                    ; calc. number of words to move
        rep     movsw                   ; move words
        adc     cx,cx                   ; see if 1 more byte to do
        rep     movsb                   ; do repeat move
        pop     di                      ; restore destination address
        pop     ds                      ; restore DS
E_DP_memcpy:
;=======================================================================
func    macro   name
        dw      _&name&_defs - module_start,_&name&_name - module_start,_&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
        dw      0,0,0
_DATA   ends

        end

⌨️ 快捷键说明

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