📄 codei86.asm
字号:
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 + -