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

📄 ops.c

📁 u-boot1.3.0的原码,从配了网络驱动和FLASH的驱动,并该用ESC竟如
💻 C
📖 第 1 页 / 共 5 页
字号:
REMARKS:Handles opcode 0x0e****************************************************************************/void x86emuOp_push_CS(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("PUSH\tCS\n");    TRACE_AND_STEP();    push_word(M.x86.R_CS);    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x0f. Escape for two-byte opcode (286 or better)****************************************************************************/void x86emuOp_two_byte(u8 X86EMU_UNUSED(op1)){    u8 op2 = (*sys_rdb)(((u32)M.x86.R_CS << 4) + (M.x86.R_IP++));    INC_DECODED_INST_LEN(1);    (*x86emu_optab2[op2])(op2);}/****************************************************************************REMARKS:Handles opcode 0x16****************************************************************************/void x86emuOp_push_SS(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("PUSH\tSS\n");    TRACE_AND_STEP();    push_word(M.x86.R_SS);    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x17****************************************************************************/void x86emuOp_pop_SS(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("POP\tSS\n");    TRACE_AND_STEP();    M.x86.R_SS = pop_word();    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x1e****************************************************************************/void x86emuOp_push_DS(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("PUSH\tDS\n");    TRACE_AND_STEP();    push_word(M.x86.R_DS);    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x1f****************************************************************************/void x86emuOp_pop_DS(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("POP\tDS\n");    TRACE_AND_STEP();    M.x86.R_DS = pop_word();    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x26****************************************************************************/void x86emuOp_segovr_ES(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("ES:\n");    TRACE_AND_STEP();    M.x86.mode |= SYSMODE_SEGOVR_ES;    /*     * note the lack of DECODE_CLEAR_SEGOVR(r) since, here is one of 4     * opcode subroutines we do not want to do this.     */    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x27****************************************************************************/void x86emuOp_daa(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("DAA\n");    TRACE_AND_STEP();    M.x86.R_AL = daa_byte(M.x86.R_AL);    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x2e****************************************************************************/void x86emuOp_segovr_CS(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("CS:\n");    TRACE_AND_STEP();    M.x86.mode |= SYSMODE_SEGOVR_CS;    /* note no DECODE_CLEAR_SEGOVR here. */    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x2f****************************************************************************/void x86emuOp_das(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("DAS\n");    TRACE_AND_STEP();    M.x86.R_AL = das_byte(M.x86.R_AL);    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x36****************************************************************************/void x86emuOp_segovr_SS(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("SS:\n");    TRACE_AND_STEP();    M.x86.mode |= SYSMODE_SEGOVR_SS;    /* no DECODE_CLEAR_SEGOVR ! */    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x37****************************************************************************/void x86emuOp_aaa(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("AAA\n");    TRACE_AND_STEP();    M.x86.R_AX = aaa_word(M.x86.R_AX);    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x3e****************************************************************************/void x86emuOp_segovr_DS(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("DS:\n");    TRACE_AND_STEP();    M.x86.mode |= SYSMODE_SEGOVR_DS;    /* NO DECODE_CLEAR_SEGOVR! */    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x3f****************************************************************************/void x86emuOp_aas(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("AAS\n");    TRACE_AND_STEP();    M.x86.R_AX = aas_word(M.x86.R_AX);    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x40 - 0x47****************************************************************************/void x86emuOp_inc_register(u8 op1){    START_OF_INSTR();    op1 &= 0x7;    DECODE_PRINTF("INC\t");    if (M.x86.mode & SYSMODE_PREFIX_DATA) {	u32 *reg;	reg = DECODE_RM_LONG_REGISTER(op1);	DECODE_PRINTF("\n");	TRACE_AND_STEP();	*reg = inc_long(*reg);    } else {	u16 *reg;	reg = DECODE_RM_WORD_REGISTER(op1);	DECODE_PRINTF("\n");	TRACE_AND_STEP();	*reg = inc_word(*reg);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x48 - 0x4F****************************************************************************/void x86emuOp_dec_register(u8 op1){    START_OF_INSTR();    op1 &= 0x7;    DECODE_PRINTF("DEC\t");    if (M.x86.mode & SYSMODE_PREFIX_DATA) {	u32 *reg;	reg = DECODE_RM_LONG_REGISTER(op1);	DECODE_PRINTF("\n");	TRACE_AND_STEP();	*reg = dec_long(*reg);    } else {	u16 *reg;	reg = DECODE_RM_WORD_REGISTER(op1);	DECODE_PRINTF("\n");	TRACE_AND_STEP();	*reg = dec_word(*reg);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x50 - 0x57****************************************************************************/void x86emuOp_push_register(u8 op1){    START_OF_INSTR();    op1 &= 0x7;    DECODE_PRINTF("PUSH\t");    if (M.x86.mode & SYSMODE_PREFIX_DATA) {	u32 *reg;	reg = DECODE_RM_LONG_REGISTER(op1);	DECODE_PRINTF("\n");	TRACE_AND_STEP();	push_long(*reg);    } else {	u16 *reg;	reg = DECODE_RM_WORD_REGISTER(op1);	DECODE_PRINTF("\n");	TRACE_AND_STEP();	push_word(*reg);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x58 - 0x5F****************************************************************************/void x86emuOp_pop_register(u8 op1){    START_OF_INSTR();    op1 &= 0x7;    DECODE_PRINTF("POP\t");    if (M.x86.mode & SYSMODE_PREFIX_DATA) {	u32 *reg;	reg = DECODE_RM_LONG_REGISTER(op1);	DECODE_PRINTF("\n");	TRACE_AND_STEP();	*reg = pop_long();    } else {	u16 *reg;	reg = DECODE_RM_WORD_REGISTER(op1);	DECODE_PRINTF("\n");	TRACE_AND_STEP();	*reg = pop_word();    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x60****************************************************************************/void x86emuOp_push_all(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {	DECODE_PRINTF("PUSHAD\n");    } else {	DECODE_PRINTF("PUSHA\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {	u32 old_sp = M.x86.R_ESP;	push_long(M.x86.R_EAX);	push_long(M.x86.R_ECX);	push_long(M.x86.R_EDX);	push_long(M.x86.R_EBX);	push_long(old_sp);	push_long(M.x86.R_EBP);	push_long(M.x86.R_ESI);	push_long(M.x86.R_EDI);    } else {	u16 old_sp = M.x86.R_SP;	push_word(M.x86.R_AX);	push_word(M.x86.R_CX);	push_word(M.x86.R_DX);	push_word(M.x86.R_BX);	push_word(old_sp);	push_word(M.x86.R_BP);	push_word(M.x86.R_SI);	push_word(M.x86.R_DI);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x61****************************************************************************/void x86emuOp_pop_all(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {	DECODE_PRINTF("POPAD\n");    } else {	DECODE_PRINTF("POPA\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {	M.x86.R_EDI = pop_long();	M.x86.R_ESI = pop_long();	M.x86.R_EBP = pop_long();	M.x86.R_ESP += 4;	       /* skip ESP */	M.x86.R_EBX = pop_long();	M.x86.R_EDX = pop_long();	M.x86.R_ECX = pop_long();	M.x86.R_EAX = pop_long();    } else {	M.x86.R_DI = pop_word();	M.x86.R_SI = pop_word();	M.x86.R_BP = pop_word();	M.x86.R_SP += 2;	       /* skip SP */	M.x86.R_BX = pop_word();	M.x86.R_DX = pop_word();	M.x86.R_CX = pop_word();	M.x86.R_AX = pop_word();    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/*opcode 0x62	ILLEGAL OP, calls x86emuOp_illegal_op() *//*opcode 0x63	ILLEGAL OP, calls x86emuOp_illegal_op() *//****************************************************************************REMARKS:Handles opcode 0x64****************************************************************************/void x86emuOp_segovr_FS(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("FS:\n");    TRACE_AND_STEP();    M.x86.mode |= SYSMODE_SEGOVR_FS;    /*     * note the lack of DECODE_CLEAR_SEGOVR(r) since, here is one of 4     * opcode subroutines we do not want to do this.     */    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x65****************************************************************************/void x86emuOp_segovr_GS(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("GS:\n");    TRACE_AND_STEP();    M.x86.mode |= SYSMODE_SEGOVR_GS;    /*     * note the lack of DECODE_CLEAR_SEGOVR(r) since, here is one of 4     * opcode subroutines we do not want to do this.     */    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x66 - prefix for 32-bit register****************************************************************************/void x86emuOp_prefix_data(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("DATA:\n");    TRACE_AND_STEP();    M.x86.mode |= SYSMODE_PREFIX_DATA;    /* note no DECODE_CLEAR_SEGOVR here. */    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x67 - prefix for 32-bit address****************************************************************************/void x86emuOp_prefix_addr(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("ADDR:\n");    TRACE_AND_STEP();    M.x86.mode |= SYSMODE_PREFIX_ADDR;    /* note no DECODE_CLEAR_SEGOVR here. */    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x68****************************************************************************/void x86emuOp_push_word_IMM(u8 X86EMU_UNUSED(op1)){    u32 imm;    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {	imm = fetch_long_imm();    } else {	imm = fetch_word_imm();    }    DECODE_PRINTF2("PUSH\t%x\n", imm);    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {	push_long(imm);    } else {	push_word((u16)imm);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x69****************************************************************************/void x86emuOp_imul_word_IMM(u8 X86EMU_UNUSED(op1)){    int mod, rl, rh;    uint srcoffset;    START_OF_INSTR();    DECODE_PRINTF("IMUL\t");    FETCH_DECODE_MODRM(mod, rh, rl);    if (mod < 3) {	srcoffset = decode_rmXX_address(mod, rl);	if (M.x86.mode & SYSMODE_PREFIX_DATA) {	    u32 *destreg;	    u32 srcval;	    u32 res_lo,res_hi;	    s32 imm;

⌨️ 快捷键说明

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