📄 virtual8086modeublock.java
字号:
case REP_LODSW_A16: rep_lodsw_a16(seg0); break;
case REP_LODSD_A16: rep_lodsd_a16(seg0); break;
case LODSB_A32: lodsb_a32(seg0); break;
case LODSW_A32: lodsw_a32(seg0); break;
case LODSD_A32: lodsd_a32(seg0); break;
case REP_LODSB_A32: rep_lodsb_a32(seg0); break;
case REP_LODSW_A32: rep_lodsw_a32(seg0); break;
case REP_LODSD_A32: rep_lodsd_a32(seg0); break;
case MOVSB_A16: movsb_a16(seg0); break;
case MOVSW_A16: movsw_a16(seg0); break;
case MOVSD_A16: movsd_a16(seg0); break;
case REP_MOVSB_A16: rep_movsb_a16(seg0); break;
case REP_MOVSW_A16: rep_movsw_a16(seg0); break;
case REP_MOVSD_A16: rep_movsd_a16(seg0); break;
case MOVSB_A32: movsb_a32(seg0); break;
case MOVSW_A32: movsw_a32(seg0); break;
case MOVSD_A32: movsd_a32(seg0); break;
case REP_MOVSB_A32: rep_movsb_a32(seg0); break;
case REP_MOVSW_A32: rep_movsw_a32(seg0); break;
case REP_MOVSD_A32: rep_movsd_a32(seg0); break;
case OUTSB_A16: outsb_a16(reg0, seg0); break;
case OUTSW_A16: outsw_a16(reg0, seg0); break;
case OUTSD_A16: outsd_a16(reg0, seg0); break;
case REP_OUTSB_A16: rep_outsb_a16(reg0, seg0); break;
case REP_OUTSW_A16: rep_outsw_a16(reg0, seg0); break;
case REP_OUTSD_A16: rep_outsd_a16(reg0, seg0); break;
case SCASB_A16: scasb_a16(reg0); break;
case SCASW_A16: scasw_a16(reg0); break;
case SCASD_A16: scasd_a16(reg0); break;
case REPE_SCASB_A16: repe_scasb_a16(reg0); break;
case REPE_SCASW_A16: repe_scasw_a16(reg0); break;
case REPE_SCASD_A16: repe_scasd_a16(reg0); break;
case REPNE_SCASB_A16: repne_scasb_a16(reg0); break;
case REPNE_SCASW_A16: repne_scasw_a16(reg0); break;
case REPNE_SCASD_A16: repne_scasd_a16(reg0); break;
case STOSB_A16: stosb_a16(reg0); break;
case STOSW_A16: stosw_a16(reg0); break;
case STOSD_A16: stosd_a16(reg0); break;
case REP_STOSB_A16: rep_stosb_a16(reg0); break;
case REP_STOSW_A16: rep_stosw_a16(reg0); break;
case REP_STOSD_A16: rep_stosd_a16(reg0); break;
case STOSB_A32: stosb_a32(reg0); break;
case STOSW_A32: stosw_a32(reg0); break;
case STOSD_A32: stosd_a32(reg0); break;
case REP_STOSB_A32: rep_stosb_a32(reg0); break;
case REP_STOSW_A32: rep_stosw_a32(reg0); break;
case REP_STOSD_A32: rep_stosd_a32(reg0); break;
case LOOP_ECX: cpu.ecx--; if (cpu.ecx != 0) jump_o8((byte)reg0); break;
case LOOP_CX: cpu.ecx = (cpu.ecx & ~0xffff) | ((cpu.ecx - 1) & 0xffff); if ((0xffff & cpu.ecx) != 0) jump_o8((byte)reg0); break;
case LOOPZ_ECX: cpu.ecx--; if ((cpu.ecx != 0) && cpu.getZeroFlag()) jump_o8((byte)reg0); break;
case LOOPZ_CX: cpu.ecx = (cpu.ecx & ~0xffff) | ((cpu.ecx - 1) & 0xffff); if (((0xffff & cpu.ecx) != 0) && cpu.getZeroFlag()) jump_o8((byte)reg0); break;
case LOOPNZ_ECX: cpu.ecx--; if ((cpu.ecx != 0) && !cpu.getZeroFlag()) jump_o8((byte)reg0); break;
case LOOPNZ_CX: cpu.ecx = (cpu.ecx & ~0xffff) | ((cpu.ecx - 1) & 0xffff); if (((0xffff & cpu.ecx) != 0) && !cpu.getZeroFlag()) jump_o8((byte)reg0); break;
case JO_O8: jo_o8((byte)reg0); break;
case JNO_O8: jno_o8((byte)reg0); break;
case JC_O8: jc_o8((byte)reg0); break;
case JNC_O8: jnc_o8((byte)reg0); break;
case JZ_O8: jz_o8((byte)reg0); break;
case JNZ_O8: jnz_o8((byte)reg0); break;
case JNA_O8: jna_o8((byte)reg0); break;
case JA_O8: ja_o8((byte)reg0); break;
case JS_O8: js_o8((byte)reg0); break;
case JNS_O8: jns_o8((byte)reg0); break;
case JP_O8: jp_o8((byte)reg0); break;
case JNP_O8: jnp_o8((byte)reg0); break;
case JL_O8: jl_o8((byte)reg0); break;
case JNL_O8: jnl_o8((byte)reg0); break;
case JNG_O8: jng_o8((byte)reg0); break;
case JG_O8: jg_o8((byte)reg0); break;
case JO_O16: jo_o16((short)reg0); break;
case JNO_O16: jno_o16((short)reg0); break;
case JC_O16: jc_o16((short)reg0); break;
case JNC_O16: jnc_o16((short)reg0); break;
case JZ_O16: jz_o16((short)reg0); break;
case JNZ_O16: jnz_o16((short)reg0); break;
case JNA_O16: jna_o16((short)reg0); break;
case JA_O16: ja_o16((short)reg0); break;
case JS_O16: js_o16((short)reg0); break;
case JNS_O16: jns_o16((short)reg0); break;
case JP_O16: jp_o16((short)reg0); break;
case JNP_O16: jnp_o16((short)reg0); break;
case JL_O16: jl_o16((short)reg0); break;
case JNL_O16: jnl_o16((short)reg0); break;
case JNG_O16: jng_o16((short)reg0); break;
case JG_O16: jg_o16((short)reg0); break;
case JO_O32: jo_o32(reg0); break;
case JNO_O32: jno_o32(reg0); break;
case JC_O32: jc_o32(reg0); break;
case JNC_O32: jnc_o32(reg0); break;
case JZ_O32: jz_o32(reg0); break;
case JNZ_O32: jnz_o32(reg0); break;
case JNA_O32: jna_o32(reg0); break;
case JA_O32: ja_o32(reg0); break;
case JS_O32: js_o32(reg0); break;
case JNS_O32: jns_o32(reg0); break;
case JP_O32: jp_o32(reg0); break;
case JNP_O32: jnp_o32(reg0); break;
case JL_O32: jl_o32(reg0); break;
case JNL_O32: jnl_o32(reg0); break;
case JNG_O32: jng_o32(reg0); break;
case JG_O32: jg_o32(reg0); break;
case JCXZ: jcxz((byte)reg0); break;
case JECXZ: jecxz((byte)reg0); break;
case INC: reg0++; break;
case DEC: reg0--; break;
case FWAIT: fpu.checkExceptions(); break;
case HALT: throw exceptionGP;
// case RDTSC: long tsc = cpu.getClockCount(); reg0 = (int)tsc; reg1 = (int)(tsc >>> 32); break;
// case WRMSR: cpu.setMSR(reg0, (reg2 & 0xffffffffl) | ((reg1 & 0xffffffffl) << 32)); break;
// case RDMSR: long msr = cpu.getMSR(reg0); reg0 = (int)msr; reg1 = (int)(msr >>> 32); break;
case SETO: reg0 = cpu.getOverflowFlag() ? 1 : 0; break;
case SETNO: reg0 = cpu.getOverflowFlag() ? 0 : 1; break;
case SETC: reg0 = cpu.getCarryFlag() ? 1 : 0; break;
case SETNC: reg0 = cpu.getCarryFlag() ? 0 : 1; break;
case SETZ: reg0 = cpu.getZeroFlag() ? 1 : 0; break;
case SETNZ: reg0 = cpu.getZeroFlag() ? 0 : 1; break;
case SETNA: reg0 = cpu.getCarryFlag() || cpu.getZeroFlag() ? 1 : 0; break;
case SETA: reg0 = cpu.getCarryFlag() || cpu.getZeroFlag() ? 0 : 1; break;
case SETS: reg0 = cpu.getSignFlag() ? 1 : 0; break;
case SETNS: reg0 = cpu.getSignFlag() ? 0 : 1; break;
case SETP: reg0 = cpu.getParityFlag() ? 1 : 0; break;
case SETNP: reg0 = cpu.getParityFlag() ? 0 : 1; break;
case SETL: reg0 = cpu.getSignFlag() != cpu.getOverflowFlag() ? 1 : 0; break;
case SETNL: reg0 = cpu.getSignFlag() != cpu.getOverflowFlag() ? 0 : 1; break;
case SETNG: reg0 = cpu.getZeroFlag() || (cpu.getSignFlag() != cpu.getOverflowFlag()) ? 1 : 0; break;
case SETG: reg0 = cpu.getZeroFlag() || (cpu.getSignFlag() != cpu.getOverflowFlag()) ? 0 : 1; break;
case SMSW: reg0 = cpu.getCR0() & 0xffff; break;
// case LMSW: cpu.setCR0((cpu.getCR0() & ~0xf) | (reg0 & 0xf)); break;
// case LGDT_O16: cpu.gdtr = cpu.createDescriptorTableSegment(reg1 & 0x00ffffff, reg0); break;
// case LGDT_O32: cpu.gdtr = cpu.createDescriptorTableSegment(reg1, reg0); break;
// case LIDT_O16: cpu.idtr = cpu.createDescriptorTableSegment(reg1 & 0x00ffffff, reg0); break;
// case LIDT_O32: cpu.idtr = cpu.createDescriptorTableSegment(reg1, reg0); break;
case CPUID: cpuid(); break;
// case CLTS: cpu.setCR3(cpu.getCR3() & ~0x4); break;
case BITWISE_FLAGS_O8: bitwise_flags((byte)reg0); break;
case BITWISE_FLAGS_O16: bitwise_flags((short)reg0); break;
case BITWISE_FLAGS_O32: bitwise_flags(reg0); break;
case SUB_O8_FLAGS: sub_o8_flags(reg0, reg2, reg1); break;
case SUB_O16_FLAGS: sub_o16_flags(reg0, reg2, reg1); break;
case SUB_O32_FLAGS: sub_o32_flags(reg0l, reg2, reg1); break;
case REP_SUB_O8_FLAGS: rep_sub_o8_flags(reg0, reg2, reg1); break;
case REP_SUB_O16_FLAGS: rep_sub_o16_flags(reg0, reg2, reg1); break;
case REP_SUB_O32_FLAGS: rep_sub_o32_flags(reg0, reg2, reg1); break;
case ADD_O8_FLAGS: add_o8_flags(reg0, reg2, reg1); break;
case ADD_O16_FLAGS: add_o16_flags(reg0, reg2, reg1); break;
case ADD_O32_FLAGS: add_o32_flags(reg0l, reg2, reg1); break;
case ADC_O8_FLAGS: adc_o8_flags(reg0, reg2, reg1); break;
case ADC_O16_FLAGS: adc_o16_flags(reg0, reg2, reg1); break;
case ADC_O32_FLAGS: adc_o32_flags(reg0l, reg2, reg1); break;
case SBB_O8_FLAGS: sbb_o8_flags(reg0, reg2, reg1); break;
case SBB_O16_FLAGS: sbb_o16_flags(reg0, reg2, reg1); break;
case SBB_O32_FLAGS: sbb_o32_flags(reg0l, reg2, reg1); break;
case INC_O8_FLAGS: inc_flags((byte)reg0); break;
case INC_O16_FLAGS: inc_flags((short)reg0); break;
case INC_O32_FLAGS: inc_flags(reg0); break;
case DEC_O8_FLAGS: dec_flags((byte)reg0); break;
case DEC_O16_FLAGS: dec_flags((short)reg0); break;
case DEC_O32_FLAGS: dec_flags(reg0); break;
case SHL_O8_FLAGS: shl_flags((byte)reg0, (byte)reg2, reg1); break;
case SHL_O32_FLAGS: shl_flags(reg0, reg2, reg1); break;
case SHR_O8_FLAGS: shr_flags((byte)reg0, reg2, reg1); break;
case SHR_O16_FLAGS: shr_flags((short)reg0, reg2, reg1); break;
case SHR_O32_FLAGS: shr_flags(reg0, reg2, reg1); break;
case SAR_O8_FLAGS: sar_flags((byte)reg0, (byte)reg2, reg1); break;
case SAR_O16_FLAGS: sar_flags((short)reg0, (short)reg2, reg1); break;
case SAR_O32_FLAGS: sar_flags(reg0, reg2, reg1); break;
case RCL_O8_FLAGS: rcl_o8_flags(reg0, reg1); break;
case RCL_O16_FLAGS: rcl_o16_flags(reg0, reg1); break;
case RCL_O32_FLAGS: rcl_o32_flags(reg0l, reg1); break;
case RCR_O8_FLAGS: rcr_o8_flags(reg0, reg1); break;
case RCR_O16_FLAGS: rcr_o16_flags(reg0, reg1); break;
case RCR_O32_FLAGS: rcr_o32_flags(reg0l, reg1); break;
case ROL_O8_FLAGS: rol_flags((byte)reg0, reg1); break;
case ROL_O16_FLAGS: rol_flags((short)reg0, reg1); break;
case ROL_O32_FLAGS: rol_flags(reg0, reg1); break;
case ROR_O8_FLAGS: ror_flags((byte)reg0, reg1); break;
case ROR_O16_FLAGS: ror_flags((short)reg0, reg1); break;
case ROR_O32_FLAGS: ror_flags(reg0, reg1); break;
case NEG_O8_FLAGS: neg_flags((byte)reg0); break;
case NEG_O16_FLAGS: neg_flags((short)reg0); break;
case NEG_O32_FLAGS: neg_flags(reg0); break;
case FLOAD0_ST0:
freg0 = fpu.ST(0);
validateOperand(freg0);
break;
case FLOAD0_STN:
freg0 = fpu.ST(microcodes[position++]);
validateOperand(freg0);
break;
case FLOAD0_MEM_SINGLE: {
// 0x7f800001 thru 0x7fbfffff // SNaN Singalling
// 0x7fc00000 thru 0x7fffffff // QNaN Quiet
// 0xff800001 thru 0xffbfffff // SNaN Signalling
// 0xffc00000 thru 0xffffffff // QNaN Quiet
int n = seg0.getDoubleWord(addr0);
freg0 = Float.intBitsToFloat(n);
if ((Double.isNaN(freg0)) && ((n & (1 << 22)) == 0))
fpu.setInvalidOperation();
validateOperand(freg0);
} break;
case FLOAD0_MEM_DOUBLE: {
long n = seg0.getQuadWord(addr0);
freg0 = Double.longBitsToDouble(n);
if ((Double.isNaN(freg0)) && ((n & (0x01l << 51)) == 0))
fpu.setInvalidOperation();
validateOperand(freg0);
} break;
case FLOAD0_REG0:
freg0 = (double) reg0;
validateOperand(freg0);
break;
case FLOAD0_REG0L:
freg0 = (double) reg0l;
validateOperand(freg0);
break;
case FLOAD0_1:
freg0 = 1.0;
// validateOperand(freg0);
break;
case FLOAD0_L2TEN:
freg0 = L2TEN;
// validateOperand(freg0);
break;
case FLOAD0_L2E:
freg0 = L2E;
// validateOperand(freg0);
break;
case FLOAD0_PI:
freg0 = Math.PI;
// validateOperand(freg0);
break;
case FLOAD0_LOG2:
freg0 = LOG2;
// validateOperand(freg0);
break;
case FLOAD0_LN2:
freg0 = LN2;
// validateOperand(freg0);
break;
case FLOAD0_POS0:
freg0 = POS0;
// validateOperand(freg0);
break;
case FLOAD1_ST0:
freg1 = fpu.ST(0);
validateOperand(freg1);
break;
case FLOAD1_STN:
freg1 = fpu.ST(microcodes[position++]);
validateOperand(freg1);
break;
case FLOAD1_MEM_SINGLE: {
int n = seg0.getDoubleWord(addr0);
freg1 = Float.intBitsToFloat(n);
if ((Double.isNaN(freg1)) && ((n & (1 << 22)) == 0))
fpu.setInvalidOperation();
validateOperand(freg1);
} break;
case FLOAD1_MEM_DOUBLE: {
long n = seg0.getQuadWord(addr0);
freg1 = Double.longBitsToDouble(n);
if ((Double.isNaN(freg1)) && ((n & (0x01l << 51)) == 0))
fpu.setInvalidOperation();
validateOperand(freg1);
} break;
case FLOAD1_REG0:
freg1 = (double) reg0;
validateOperand(freg1);
break;
case FLOAD1_REG0L:
freg1 = (double) reg0l;
validateOperand(freg1);
break;
case FSTORE0_ST0: fpu.setST(0, freg0); break;
case FSTORE0_STN: fpu.setST(microcodes[position++], freg0); break;
case FSTORE0_MEM_SINGLE: {
int n = Float.floatToRawIntBits((float) freg0);
seg0.setDoubleWord(addr0, n);
} break;
case FSTORE0_MEM_DOUBLE: {
long n = Double.doubleToRawLongBits(freg0);
seg0.setQuadWord(addr0, n);
} break;
case FSTORE0_REG0: reg0 = (int) freg0; break;
case FSTORE1_ST0: fpu.setST(0, freg1); break;
case FSTORE1_STN: fpu.setST(microcodes[position++], freg1); break;
case FSTORE1_MEM_SINGLE: {
int n = Float.floatToRawIntBits((float) freg1);
seg0.setDoubleWord(addr0, n);
} break;
case FSTORE1_MEM_DOUBLE: {
long n = Double.doubleToRawLongBits(freg1);
seg0.setQuadWord(addr0, n);
} break;
case FSTORE1_REG0: reg0 = (int) freg1; break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -