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

📄 ops.c

📁 MIPS处理器的bootloader,龙芯就是用的修改过的PMON2
💻 C
📖 第 1 页 / 共 5 页
字号:
    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_ESI = inc_long(M.x86.R_ESI);    } else {        M.x86.R_SI = inc_word(M.x86.R_SI);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x47****************************************************************************/static void x86emuOp_inc_DI(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("INC\tEDI\n");    } else {        DECODE_PRINTF("INC\tDI\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_EDI = inc_long(M.x86.R_EDI);    } else {        M.x86.R_DI = inc_word(M.x86.R_DI);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x48****************************************************************************/static void x86emuOp_dec_AX(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("DEC\tEAX\n");    } else {        DECODE_PRINTF("DEC\tAX\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_EAX = dec_long(M.x86.R_EAX);    } else {        M.x86.R_AX = dec_word(M.x86.R_AX);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x49****************************************************************************/static void x86emuOp_dec_CX(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("DEC\tECX\n");    } else {        DECODE_PRINTF("DEC\tCX\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_ECX = dec_long(M.x86.R_ECX);    } else {        M.x86.R_CX = dec_word(M.x86.R_CX);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x4a****************************************************************************/static void x86emuOp_dec_DX(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("DEC\tEDX\n");    } else {        DECODE_PRINTF("DEC\tDX\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_EDX = dec_long(M.x86.R_EDX);    } else {        M.x86.R_DX = dec_word(M.x86.R_DX);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x4b****************************************************************************/static void x86emuOp_dec_BX(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("DEC\tEBX\n");    } else {        DECODE_PRINTF("DEC\tBX\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_EBX = dec_long(M.x86.R_EBX);    } else {        M.x86.R_BX = dec_word(M.x86.R_BX);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x4c****************************************************************************/static void x86emuOp_dec_SP(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("DEC\tESP\n");    } else {        DECODE_PRINTF("DEC\tSP\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_ESP = dec_long(M.x86.R_ESP);    } else {        M.x86.R_SP = dec_word(M.x86.R_SP);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x4d****************************************************************************/static void x86emuOp_dec_BP(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("DEC\tEBP\n");    } else {        DECODE_PRINTF("DEC\tBP\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_EBP = dec_long(M.x86.R_EBP);    } else {        M.x86.R_BP = dec_word(M.x86.R_BP);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x4e****************************************************************************/static void x86emuOp_dec_SI(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("DEC\tESI\n");    } else {        DECODE_PRINTF("DEC\tSI\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_ESI = dec_long(M.x86.R_ESI);    } else {        M.x86.R_SI = dec_word(M.x86.R_SI);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x4f****************************************************************************/static void x86emuOp_dec_DI(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("DEC\tEDI\n");    } else {        DECODE_PRINTF("DEC\tDI\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_EDI = dec_long(M.x86.R_EDI);    } else {        M.x86.R_DI = dec_word(M.x86.R_DI);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x50****************************************************************************/static void x86emuOp_push_AX(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("PUSH\tEAX\n");    } else {        DECODE_PRINTF("PUSH\tAX\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        push_long(M.x86.R_EAX);    } else {        push_word(M.x86.R_AX);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x51****************************************************************************/static void x86emuOp_push_CX(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("PUSH\tECX\n");    } else {        DECODE_PRINTF("PUSH\tCX\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        push_long(M.x86.R_ECX);    } else {        push_word(M.x86.R_CX);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x52****************************************************************************/static void x86emuOp_push_DX(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("PUSH\tEDX\n");    } else {        DECODE_PRINTF("PUSH\tDX\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        push_long(M.x86.R_EDX);    } else {        push_word(M.x86.R_DX);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x53****************************************************************************/static void x86emuOp_push_BX(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("PUSH\tEBX\n");    } else {        DECODE_PRINTF("PUSH\tBX\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        push_long(M.x86.R_EBX);    } else {        push_word(M.x86.R_BX);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x54****************************************************************************/static void x86emuOp_push_SP(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("PUSH\tESP\n");    } else {        DECODE_PRINTF("PUSH\tSP\n");    }    TRACE_AND_STEP();	/* Always push (E)SP, since we are emulating an i386 and above	 * processor. This is necessary as some BIOS'es use this to check	 * what type of processor is in the system.	 */	if (M.x86.mode & SYSMODE_PREFIX_DATA) {		push_long(M.x86.R_ESP);	} else {		push_word((u16)(M.x86.R_SP));    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x55****************************************************************************/static void x86emuOp_push_BP(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("PUSH\tEBP\n");    } else {        DECODE_PRINTF("PUSH\tBP\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        push_long(M.x86.R_EBP);    } else {        push_word(M.x86.R_BP);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x56****************************************************************************/static void x86emuOp_push_SI(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("PUSH\tESI\n");    } else {        DECODE_PRINTF("PUSH\tSI\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        push_long(M.x86.R_ESI);    } else {        push_word(M.x86.R_SI);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x57****************************************************************************/static void x86emuOp_push_DI(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("PUSH\tEDI\n");    } else {        DECODE_PRINTF("PUSH\tDI\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        push_long(M.x86.R_EDI);    } else {        push_word(M.x86.R_DI);    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x58****************************************************************************/static void x86emuOp_pop_AX(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("POP\tEAX\n");    } else {        DECODE_PRINTF("POP\tAX\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_EAX = pop_long();    } else {        M.x86.R_AX = pop_word();    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}/****************************************************************************REMARKS:Handles opcode 0x59****************************************************************************/static void x86emuOp_pop_CX(u8 X86EMU_UNUSED(op1)){    START_OF_INSTR();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        DECODE_PRINTF("POP\tECX\n");    } else {        DECODE_PRINTF("POP\tCX\n");    }    TRACE_AND_STEP();    if (M.x86.mode & SYSMODE_PREFIX_DATA) {        M.x86.R_ECX = pop_long();    } else {        M.x86.R_CX = pop_word();    }    DECODE_CLEAR_SEGOVR();    END_OF_INSTR();}

⌨️ 快捷键说明

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