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

📄 pdefni86.h

📁 Open Watcom 的 C 编译器源代码
💻 H
📖 第 1 页 / 共 3 页
字号:
static byte_seq DP_memcmp = {
                16,
                push_ds,
                xchg_cx_ax,
                mov_ds_ax,
                or_cx_cx,
                repz,
                cmpsb,
                je,  5,
                sbb_rr, cx_cx,
                sbb_cx_ffff,     /* 3 bytes */
                pop_ds
        };

/****************************************************************/

/* di memchr( di, al, cx ) zaps dx,es,di,cx */
#define C_memchr_ret    HW_D( HW_DI )
#define C_memchr_parms  P_DI_AL_CX
#define C_memchr_saves   HW_NotD_4( HW_DX, HW_ES, HW_DI, HW_CX )
static byte_seq C_memchr = {
                14,
                jcxz, 10,
                mov_dx_ds,
                mov_es_dx,
                repnz,
                scasb,
                jne, 2,
                dec_di,
                hide2,
                mov_di_cx
        };


/* cx:di memchr( es:di, al, cx ) zaps di,cx */
#define DF_memchr_ret   HW_D_2( HW_DI, HW_CX )
#define DF_memchr_parms P_ESDI_AL_CX
#define DF_memchr_saves  HW_NotD_2( HW_DI, HW_CX )
static byte_seq DF_memchr = {
                12,
                jcxz, 8,
                repnz,
                scasb,
                jne, 4,
                dec_di,
                mov_cx_es,
                hide2,
                mov_di_cx
        };


/* cx:di memchr( es:di, al, cx ) zaps di,cx */
#define DP_memchr_ret   HW_D_2( HW_DI, HW_CX )
#define DP_memchr_parms P_ESDI_AL_CX
#define DP_memchr_saves  HW_NotD_2( HW_DI, HW_CX )
static byte_seq DP_memchr = {
                12,
                jcxz, 8,
                repnz,
                scasb,
                jne, 4,
                dec_di,
                mov_cx_es,
                hide2,
                mov_di_cx
        };

/****************************************************************/

/* ax strcmp( si, di ) zaps ax,si,di */
#define S_strcmp_ret    HW_D( HW_AX )
#define S_strcmp_parms  P_SI_DI
#define S_strcmp_saves   HW_NotD_3( HW_AX, HW_SI, HW_DI )
static byte_seq S_strcmp = {
                14,
                lodsb,
                mov_ah_atdi,
                sub_al_ah,
                jne, 5,
                inc_di,
                cmp_al_ah,
                jne, -12,
                sbb_ah_ah
        };

/* ax strcmp( si, di ) zaps ax,es,si,di,cx */
#define C_strcmp_ret    HW_D( HW_AX )
#define C_strcmp_parms  P_SI_DI
#define C_strcmp_saves   HW_NotD_5( HW_AX, HW_ES, HW_SI, HW_DI, HW_CX )
static byte_seq C_strcmp = {
                29,
                mov_ax_ds,
                mov_es_ax,
                cmpsb,
                jne, 17,
                dec_di,
                dec_si,
                mov_cx, 0xff, 0xff,
                xor_rr, ax_ax,
                repnz,
                scasb,
                not_cx,
                sub_rr, di_cx,
                repz,
                cmpsb,
                je,  5,
                sbb_rr, ax_ax,
                sbb_ax_i, 0xff, 0xff
        };

/* ax strcmp( ds:si, es:di ) zaps ax,si,di */
#define ZF_strcmp_ret    HW_D( HW_AX )
#define ZF_strcmp_parms  P_DSSI_ESDI
#define ZF_strcmp_saves   HW_NotD_3( HW_AX, HW_SI, HW_DI )
static byte_seq ZF_strcmp = {
                15,
                lodsb,
                mov_ah_atesdi,
                sub_al_ah,
                jne, 5,
                inc_di,
                cmp_al_ah,
                jne, -13,
                sbb_ah_ah
        };

/* ax strcmp( si:ax, es:di ) zaps ax,si,di */
#define ZP_strcmp_ret    HW_D( HW_AX )
#define ZP_strcmp_parms  P_SIAX_ESDI
#define ZP_strcmp_saves   HW_NotD_3( HW_AX, HW_SI, HW_DI )
static byte_seq ZP_strcmp = {
                20,
                push_ds,
                xchg_si_ax,
                mov_ds_ax,
                lodsb,
                mov_ah_atesdi,
                sub_al_ah,
                jne, 5,
                inc_di,
                cmp_al_ah,
                jne, -13,
                sbb_ah_ah,
                pop_ds
        };


/* cx strcmp( ds:si, es:di ) zaps ax,si,di,cx */
#define DF_strcmp_ret   HW_D( HW_CX )
#define DF_strcmp_parms P_DSSI_ESDI
#define DF_strcmp_saves  HW_NotD_4( HW_AX, HW_SI, HW_DI, HW_CX )
static byte_seq DF_strcmp = {
                25,
                cmpsb,
                jne, 17,
                dec_di,
                dec_si,
                mov_cx, 0xff, 0xff,
                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 */
        };


/* cx strcmp( si:ax, es:di ) zaps ax,si,di,cx */
#define DP_strcmp_ret   HW_D( HW_CX )
#define DP_strcmp_parms P_SIAX_ESDI
#define DP_strcmp_saves  HW_NotD_4( HW_AX, HW_SI, HW_DI, HW_CX )
static byte_seq DP_strcmp = {
                30,
                push_ds,
                xchg_si_ax,
                mov_ds_ax,
                cmpsb,
                jne, 17,
                dec_di,
                dec_si,
                mov_cx, 0xff, 0xff,
                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 */
                pop_ds
        };

/****************************************************************/

/* cx strlen( di ) zaps ax,es,cx,di */
#define C_strlen_ret    HW_D( HW_CX )
#define C_strlen_parms  P_DI
#define C_strlen_saves   HW_NotD_4( HW_AX, HW_ES, HW_CX, HW_DI )
static byte_seq C_strlen = {
                14,
                mov_ax_ds,
                mov_es_ax,
                mov_cx, 0xff, 0xff,
                xor_rr, ax_ax,
                repnz,
                scasb,
                not_cx,
                dec_cx
        };


/* cx strlen( es:di ) zaps ax,cx,di */
#define DF_strlen_ret   HW_D( HW_CX )
#define DF_strlen_parms P_ESDI
#define DF_strlen_saves  HW_NotD_3( HW_AX, HW_CX, HW_DI )
static byte_seq DF_strlen = {
                10,
                mov_cx, 0xff, 0xff,
                xor_rr, ax_ax,
                repnz,
                scasb,
                not_cx,
                dec_cx
        };

/* cx strlen( es:di ) zaps ax,cx,di */
#define DP_strlen_ret   HW_D( HW_CX )
#define DP_strlen_parms P_ESDI
#define DP_strlen_saves  HW_NotD_3( HW_AX, HW_CX, HW_DI )
static byte_seq DP_strlen = {
                10,
                mov_cx, 0xff, 0xff,
                xor_rr, ax_ax,
                repnz,
                scasb,
                not_cx,
                dec_cx
        };

/****************************************************************/

#define C_abs_ret    HW_D( HW_AX )
#define C_abs_parms  P_AX
#define C_abs_saves   HW_NotD_2( HW_AX, HW_DX )
static byte_seq C_abs = {
                5,
                cwd,
                xor_rr, ax_dx,
                sub_rr, ax_dx
        };

/****************************************************************/

#define C_labs_ret    HW_D_2( HW_AX, HW_DX )
#define C_labs_parms  P_AXDX
#define C_labs_saves   HW_NotD_2( HW_AX, HW_DX )
static byte_seq C_labs = {
                11,
                or_dx_dx,
                jge, 7,
                neg_ax,
                adc_dx_0,
                neg_dx
        };

/****************************************************************/

#define C_inp_ret    HW_D( HW_AX )
#define C_inp_parms  P_DX
#define C_inp_saves   HW_NotD( HW_AX )
static byte_seq C_inp = {
                3,
                in_al_dx,
                sub_ah_ah
        };

/****************************************************************/

#define C_inpw_ret    HW_D( HW_AX )
#define C_inpw_parms  P_DX
#define C_inpw_saves   HW_NotD( HW_AX )
static byte_seq C_inpw = {
                1,
                in_ax_dx
        };

/****************************************************************/

#define C_outp_ret    HW_D( HW_AX )
#define C_outp_parms  P_DX_AL
#define C_outp_saves   HW_NotD( HW_EMPTY )
static byte_seq C_outp = {
                1,
                out_dx_al
        };

/****************************************************************/

#define C_outpw_ret    HW_D( HW_AX )
#define C_outpw_parms  P_DX_AX
#define C_outpw_saves   HW_NotD( HW_EMPTY )
static byte_seq C_outpw = {
                1,
                out_dx_ax
        };

/****************************************************************/

#define C_movedata_ret    HW_D( HW_EMPTY )
#define C_movedata_parms  P_AX_SI_ES_DI_CX
#define C_movedata_saves   HW_NotD_3( HW_CX, HW_SI, HW_DI )
static byte_seq C_movedata = {
                12,
                push_ds,
                mov_ds_ax,
                shr_cx_1,
                rep,
                movsw,
                adc_cx_cx,
                rep,
                movsb,
                pop_ds
        };
/****************************************************************/

#define C_enable_ret    HW_D( HW_EMPTY )
#define C_enable_parms  P_AX
#define C_enable_saves   HW_NotD( HW_EMPTY )
static byte_seq C_enable = {
                2,
                sti,
                cld
        };
/****************************************************************/

#define C_disable_ret    HW_D( HW_EMPTY )
#define C_disable_parms  P_AX
#define C_disable_saves   HW_NotD( HW_EMPTY )

⌨️ 快捷键说明

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