Преглед изворни кода

UserspaceEmulator: Implement the JCXZ instruction

Andreas Kling пре 5 година
родитељ
комит
c3441719ea
1 измењених фајлова са 7 додато и 1 уклоњено
  1. 7 1
      DevTools/UserspaceEmulator/SoftCPU.cpp

+ 7 - 1
DevTools/UserspaceEmulator/SoftCPU.cpp

@@ -1289,7 +1289,13 @@ void SoftCPU::IN_AX_imm8(const X86::Instruction&) { TODO(); }
 void SoftCPU::IN_EAX_DX(const X86::Instruction&) { TODO(); }
 void SoftCPU::IN_EAX_imm8(const X86::Instruction&) { TODO(); }
 void SoftCPU::IRET(const X86::Instruction&) { TODO(); }
-void SoftCPU::JCXZ_imm8(const X86::Instruction&) { TODO(); }
+
+void SoftCPU::JCXZ_imm8(const X86::Instruction& insn)
+{
+    if ((insn.a32() && ecx() == 0) || (!insn.a32() && cx() == 0))
+        set_eip(eip() + (i8)insn.imm8());
+}
+
 void SoftCPU::JMP_FAR_mem16(const X86::Instruction&) { TODO(); }
 void SoftCPU::JMP_FAR_mem32(const X86::Instruction&) { TODO(); }
 void SoftCPU::JMP_RM16(const X86::Instruction&) { TODO(); }