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

📄 ops.c

📁 MIPS处理器的bootloader,龙芯就是用的修改过的PMON2
💻 C
📖 第 1 页 / 共 5 页
字号:
            u16 *destreg,*srcreg;            destreg = DECODE_RM_WORD_REGISTER(rh);            DECODE_PRINTF(",");            srcreg = DECODE_RM_WORD_REGISTER(rl);            DECODE_PRINTF("\n");            TRACE_AND_STEP();            *destreg = U16_FUNC(x86emu_optab[op1].x86emu_priop)(*destreg, *srcreg);        }        break;    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles byte AL_IMM operations.****************************************************************************/static void x86emuOp_byte_AL_IMM(u8 X86EMU_UNUSED(op1)){    u8 srcval;    START_OF_INSTR();    DECODE_PRINTF(x86emu_optab[op1].x86emu_mnem);    DECODE_PRINTF("AL,");    srcval = fetch_byte_imm();    DECODE_PRINTF2("%x\n", srcval);    TRACE_AND_STEP();    M.x86.R_AL = U8_FUNC(x86emu_optab[op1].x86emu_priop)(M.x86.R_AL, srcval);    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles word and long AX_IMM operations.****************************************************************************/static void x86emuOp_word_AX_IMM(u8 X86EMU_UNUSED(op1)){    u32 srcval;    START_OF_INSTR();    DECODE_PRINTF(x86emu_optab[op1].x86emu_mnem);    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("EAX,");        srcval = fetch_long_imm();    } else {        DECODE_PRINTF("AX,");        srcval = fetch_word_imm();    }    DECODE_PRINTF2("%x\n", srcval);    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_EAX = U32_FUNC(x86emu_optab[op1].x86emu_priopl)(M.x86.R_EAX, srcval);    } else {        M.x86.R_AX = U16_FUNC(x86emu_optab[op1].x86emu_priop)(M.x86.R_AX, (u16)srcval);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x06****************************************************************************/static void x86emuOp_push_ES(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("PUSH\tES\n");    TRACE_AND_STEP();    push_word(M.x86.R_ES);    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x07****************************************************************************/static void x86emuOp_pop_ES(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    DECODE_PRINTF("POP\tES\n");    TRACE_AND_STEP();    M.x86.R_ES = pop_word();    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x0e****************************************************************************/static 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)****************************************************************************/static 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****************************************************************************/static 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****************************************************************************/static 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****************************************************************************/static 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****************************************************************************/static 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****************************************************************************/static 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****************************************************************************/static 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****************************************************************************/static 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****************************************************************************/static 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****************************************************************************/static 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****************************************************************************/static 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****************************************************************************/static 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****************************************************************************/static 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****************************************************************************/static void x86emuOp_inc_AX(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("INC\tEAX\n");    } else {        DECODE_PRINTF("INC\tAX\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_EAX = inc_long(M.x86.R_EAX);    } else {        M.x86.R_AX = inc_word(M.x86.R_AX);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x41****************************************************************************/static void x86emuOp_inc_CX(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("INC\tECX\n");    } else {        DECODE_PRINTF("INC\tCX\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_ECX = inc_long(M.x86.R_ECX);    } else {        M.x86.R_CX = inc_word(M.x86.R_CX);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x42****************************************************************************/static void x86emuOp_inc_DX(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("INC\tEDX\n");    } else {        DECODE_PRINTF("INC\tDX\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_EDX = inc_long(M.x86.R_EDX);    } else {        M.x86.R_DX = inc_word(M.x86.R_DX);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x43****************************************************************************/static void x86emuOp_inc_BX(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("INC\tEBX\n");    } else {        DECODE_PRINTF("INC\tBX\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_EBX = inc_long(M.x86.R_EBX);    } else {        M.x86.R_BX = inc_word(M.x86.R_BX);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x44****************************************************************************/static void x86emuOp_inc_SP(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("INC\tESP\n");    } else {        DECODE_PRINTF("INC\tSP\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_ESP = inc_long(M.x86.R_ESP);    } else {        M.x86.R_SP = inc_word(M.x86.R_SP);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x45****************************************************************************/static void x86emuOp_inc_BP(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("INC\tEBP\n");    } else {        DECODE_PRINTF("INC\tBP\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_EBP = inc_long(M.x86.R_EBP);    } else {        M.x86.R_BP = inc_word(M.x86.R_BP);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x46****************************************************************************/static void x86emuOp_inc_SI(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("INC\tESI\n");    } else {        DECODE_PRINTF("INC\tSI\n");    }    TRACE_AND_STEP();

⌨️ 快捷键说明

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