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 + -
显示快捷键?