📄 pdefn386.h
字号:
{ rep,
stosw,
stosb, }
};
/* di memcpy( di, si, cx ) zaps es,si,cx */
#define S_memcpy_ret HW_D( HW_EDI )
#define S_memcpy_parms P_DI_SI_CX
#define S_memcpy_saves HW_NotD_2( HW_ESI, HW_ECX )
static byte_seq S_memcpy = {
8,
{ push_es,
push_di,
push_ds,
pop_es,
rep,
movsb,
pop_di,
pop_es }
};
static byte_seq FS_memcpy = {
4,
{ push_di,
rep,
movsb,
pop_di, }
};
/* di memcpy( di, si, cx ) zaps ax,es,si,cx */
#define C_memcpy_ret HW_D( HW_EDI )
#define C_memcpy_parms P_DI_SI_CX
#define C_memcpy_saves HW_NotD_3( HW_EAX, HW_ESI, HW_ECX )
#define C_memcpy_bodysize 16
#define C_memcpy_body \
push_di,\
mov_ax_cx,\
shr_cx_2,\
rep,\
movsd,\
mov_cl_al,\
and_cl,3,\
rep,\
movsb,\
pop_di
static byte_seq C_memcpy = {
C_memcpy_bodysize+6,
{ push_es,
mov_ax_ds,
mov_es_ax,
C_memcpy_body,
pop_es }
};
static byte_seq FC_memcpy = {
C_memcpy_bodysize,
{ C_memcpy_body }
};
/* es:di memcpy( es:di, ds:si, cx ) zaps cx,si */
#define Z_memcpy_ret HW_D_2( HW_ES, HW_EDI )
#define Z_memcpy_parms P_ESDI_DSSI_CX
#define Z_memcpy_saves HW_NotD_2( HW_ESI, HW_ECX )
static byte_seq Z_memcpy = {
4,
{ push_di,
rep,
movsb,
pop_di }
};
/* es:di memcpy( es:di, ds:si, cx ) zaps cx,si */
#define BD_memcpy_ret HW_D_2( HW_ES, HW_EDI )
#define BD_memcpy_parms P_ESDI_DSSI_CX
#define BD_memcpy_saves C_memcpy_saves
static byte_seq BD_memcpy = {
C_memcpy_bodysize,
{ C_memcpy_body }
};
/* dx:eax memcpy( dx:edi, cx:esi, eax ) zaps ecx,esi,edi,eax */
#define DP_memcpy_ret HW_D_2( HW_DX, HW_EAX )
#define DP_memcpy_parms P_DXEDI_CXESI_EAX
#define DP_memcpy_saves HW_NotD_4( HW_ESI, HW_ECX, HW_EDI, HW_EAX )
static byte_seq DP_memcpy = {
25,
{ push_ds,
push_es,
push_di,
xchg_cx_ax,
mov_ds_ax,
mov_es_dx,
mov_ax_cx,
shr_cx_2,
rep,
movsd,
mov_cl_al,
and_cl,3,
rep,
movsb,
pop_ax,
pop_es,
pop_ds }
};
/****************************************************************/
/* ax memcmp( si, di, cx ) zaps ax,es,si,di,cx */
#define C_memcmp_ret HW_D( HW_EAX )
#define C_memcmp_parms P_SI_DI_CX
#define C_memcmp_saves HW_NotD_4( HW_EAX, HW_ESI, HW_EDI, HW_ECX )
#define C_memcmp_bodysize 11
#define C_memcmp_body \
xor_rr, ax_ax,\
repz,\
cmpsb,\
je, 5,\
sbb_rr, ax_ax,\
sbb_ax_ffff
static byte_seq C_memcmp = {
C_memcmp_bodysize+6,
{ push_es,
mov_ax_ds,
mov_es_ax,
C_memcmp_body,
pop_es }
};
static byte_seq FC_memcmp = {
C_memcmp_bodysize,
{ C_memcmp_body }
};
/* cx memcmp( ds:si, es:di, cx ) zaps si,di,cx */
#define BD_memcmp_ret HW_D( HW_ECX )
#define BD_memcmp_parms P_DSSI_ESDI_CX
#define BD_memcmp_saves HW_NotD_3( HW_ESI, HW_EDI, HW_ECX )
static byte_seq BD_memcmp = {
11,
{ or_cx_cx,
repz,
cmpsb,
je, 5,
sbb_rr, cx_cx,
sbb_cx_ffff } /* 3 bytes */
};
/* ecx memcmp( dx:esi, cx:edi, eax ) zaps esi,edi,ecx,eax */
#define DP_memcmp_ret HW_D( HW_ECX )
#define DP_memcmp_parms P_DXESI_CXEDI_EAX
#define DP_memcmp_saves HW_NotD_4( HW_ESI, HW_EDI, HW_ECX, HW_EAX )
static byte_seq DP_memcmp = {
20,
{ push_ds,
push_es,
xchg_cx_ax,
mov_ds_dx,
mov_es_ax,
or_cx_cx,
repz,
cmpsb,
je, 5,
sbb_rr, cx_cx,
sbb_cx_ffff, /* 3 bytes */
pop_es,
pop_ds }
};
/****************************************************************/
/* di memchr( di, al, cx ) zaps dx,es,di,cx */
#define C_memchr_ret HW_D( HW_EDI )
#define C_memchr_parms P_DI_AL_CX
#define C_memchr_saves HW_NotD_3( HW_EDX, HW_EDI, HW_ECX )
static byte_seq C_memchr = {
17,
{ push_es,
jcxz, 11,
mov_dx_ds,
mov_es_dx,
repnz,
scasb,
jne, 3,
dec_di,
hide2,
mov_di_cx,
pop_es }
};
static byte_seq FC_memchr = {
11,
{ jcxz, 7,
repnz,
scasb,
jne, 3,
dec_di,
hide2,
mov_di_cx, }
};
/* cx:di memchr( es:di, al, cx ) zaps di,cx */
#define BD_memchr_ret HW_D_2( HW_EDI, HW_CX )
#define BD_memchr_parms P_ESDI_AL_CX
#define BD_memchr_saves HW_NotD_2( HW_EDI, HW_ECX )
static byte_seq BD_memchr = {
13,
{ jcxz, 9,
repnz,
scasb,
jne, 5,
dec_di,
mov_cx_es,
hide2,
mov_di_cx }
};
/* cx:edi memchr( dx:edi, al, ecx ) zaps edi,ecx */
#define DP_memchr_ret HW_D_2( HW_CX, HW_EDI )
#define DP_memchr_parms P_DXEDI_AL_ECX
#define DP_memchr_saves HW_NotD_2( HW_EDI, HW_ECX )
static byte_seq DP_memchr = {
17,
{ push_es,
jcxz, 11, /* 27-jul-90, was 10 */
mov_es_dx,
repnz,
scasb,
jne, 5, /* 27-jul-90, was 4 */
dec_di,
mov_cx_es,
hide2,
mov_di_cx,
pop_es }
};
/****************************************************************/
/* ax strcmp( si, di ) zaps ax,si,di */
#define S_strcmp_ret HW_D( HW_EAX )
#define S_strcmp_parms P_SI_DI
#define S_strcmp_saves HW_NotD_3( HW_EAX, HW_ESI, HW_EDI )
static byte_seq S_strcmp = {
16,
{ lodsb,
mov_ah_atdi,
sub_al_ah,
jne, 5,
inc_di,
cmp_al_ah,
jne, -12,
size_prefix,
sbb_ah_ah,
cwde }
};
/* ax strcmp( si, di ) zaps ax,es,si,di,cx */
#define C_strcmp_ret HW_D( HW_EAX )
#define C_strcmp_parms P_SI_DI
#define C_strcmp_saves HW_NotD_4( HW_EAX, HW_ESI, HW_EDI, HW_ECX )
static byte_seq C_strcmp = {
31,
{ push_es,
mov_ax_ds,
mov_es_ax,
cmpsb,
jne, 17,
dec_di,
dec_si,
mov_cx_ffff,
xor_rr, ax_ax,
repnz,
scasb,
not_cx,
sub_rr, di_cx,
repz,
cmpsb,
je, 5,
sbb_rr, ax_ax,
sbb_ax_ffff,
pop_es }
};
/* ax strcmp( si, di ) zaps ax,si,di,cx */
#define F_strcmp_ret HW_D( HW_EAX )
#define F_strcmp_parms P_SI_DI
#define F_strcmp_saves HW_NotD_4( HW_EAX, HW_ESI, HW_EDI, HW_ECX )
static byte_seq F_strcmp = {
25,
{ cmpsb,
jne, 17,
dec_di,
dec_si,
mov_cx_ffff,
xor_rr, ax_ax,
repnz,
scasb,
not_cx,
sub_rr, di_cx,
repz,
cmpsb,
je, 5,
sbb_rr, ax_ax,
sbb_ax_ffff }
};
/* ax strcmp( ds:si, es:di ) zaps ax,si,di */
#define Z_strcmp_ret HW_D( HW_EAX )
#define Z_strcmp_parms P_DSSI_ESDI
#define Z_strcmp_saves HW_NotD_3( HW_EAX, HW_ESI, HW_EDI )
static byte_seq Z_strcmp = {
17,
{ lodsb,
mov_ah_atesdi,
sub_al_ah,
jne, 5,
inc_di,
cmp_al_ah,
jne, -13,
size_prefix,
sbb_ah_ah,
cwde }
};
/* cx strcmp( ds:si, es:di ) zaps ax,si,di,cx */
#define BD_strcmp_ret HW_D( HW_ECX )
#define BD_strcmp_parms P_DSSI_ESDI
#define BD_strcmp_saves HW_NotD_4( HW_EAX, HW_ESI, HW_EDI, HW_ECX )
static byte_seq BD_strcmp = {
25,
{ cmpsb,
jne, 17,
dec_di,
dec_si,
mov_cx_ffff,
xor_rr, ax_ax,
repnz,
scasb,
not_cx,
sub_rr, di_cx,
repz,
cmpsb,
je, 5,
sbb_rr, cx_cx,
sbb_cx_ffff } /* 3 bytes */
};
/* ecx strcmp( si:eax, cx:edi ) zaps eax,esi,edi,ecx */
#define DP_strcmp_ret HW_D( HW_ECX )
#define DP_strcmp_parms P_SIEAX_CXEDI
#define DP_strcmp_saves HW_NotD_4( HW_EAX, HW_ESI, HW_EDI, HW_ECX )
static byte_seq DP_strcmp = {
34,
{ push_ds,
push_es,
xchg_si_ax,
mov_ds_ax,
mov_es_cx,
cmpsb,
jne, 17,
dec_di,
dec_si,
xor_rr, ax_ax,
mov_cx_ax,
dec_cx,
repnz,
scasb,
not_cx,
sub_rr, di_cx,
repz,
cmpsb,
je, 5,
sbb_rr, cx_cx,
sbb_cx_ffff, /* 3 bytes */
pop_es,
pop_ds }
};
/****************************************************************/
/* cx strlen( di ) zaps ax,es,cx,di */
#define C_strlen_ret HW_D( HW_ECX )
#define C_strlen_parms P_DI
#define C_strlen_saves HW_NotD_3( HW_EAX, HW_ECX, HW_EDI )
#define C_strlen_bodysize 10
#define C_strlen_body \
mov_cx_ffff,\
xor_rr, ax_ax,\
repnz,\
scasb,\
not_cx,\
dec_cx
static byte_seq C_strlen = {
C_strlen_bodysize+6,
{ push_es,
mov_ax_ds,
mov_es_ax,
C_strlen_body,
pop_es }
};
static byte_seq FC_strlen = {
C_strlen_bodysize,
{ C_strlen_body }
};
/* cx strlen( es:di ) zaps ax,cx,di */
#define BD_strlen_ret HW_D( HW_ECX )
#define BD_strlen_parms P_ESDI
#define BD_strlen_saves HW_NotD_3( HW_EAX, HW_ECX, HW_EDI )
static byte_seq BD_strlen = {
10,
{ mov_cx_ffff,
xor_rr, ax_ax,
repnz,
scasb,
not_cx,
dec_cx }
};
/* ecx strlen( cx:edi ) zaps eax,ecx,edi */
#define DP_strlen_ret HW_D( HW_ECX )
#define DP_strlen_parms P_CXEDI
#define DP_strlen_saves HW_NotD_3( HW_EAX, HW_ECX, HW_EDI )
static byte_seq DP_strlen = {
14,
{ push_es,
mov_es_cx,
xor_rr, ax_ax,
mov_cx_ax,
dec_cx,
repnz,
scasb,
not_cx,
dec_cx,
pop_es }
};
/****************************************************************/
#define C_abs_ret HW_D( HW_EAX )
#define C_abs_parms P_AX
#define C_abs_saves HW_NotD_2( HW_EAX, HW_EDX )
static byte_seq C_abs = {
5,
{ cwd,
xor_rr, ax_dx,
sub_rr, ax_dx }
};
#define C_labs_ret HW_D( HW_EAX )
#define C_labs_parms P_AX
#define C_labs_saves HW_NotD_2( HW_EAX, HW_EDX )
static byte_seq C_labs = {
5,
{ cwd,
xor_rr, ax_dx,
sub_rr, ax_dx }
};
#define C_inp_ret HW_D( HW_EAX )
#define C_inp_parms P_DX
#define C_inp_saves HW_NotD( HW_EAX )
static byte_seq C_inp = {
3,
{ sub_rr,ax_ax,
in_al_dx }
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -