} // operation object to perform operations public Instruction() { Disassembly d = new Disassembly(); ops = new Operation(); disasm = d; }
//-------------------------------------------------------------- // Purpose: Performs an multiply instruction according to data in <instr> // Returns: nothing //-------------------------------------------------------------- public void MUL(Data instr, bool generateDisasm) { Memory registers = Computer.GetCPU().registers; instr.disasm.instruction = "mul"; uint value = registers.ReadWord((uint)(instr.RM * 4)) * registers.ReadWord((uint)(instr.RS * 4)); if (generateDisasm) { instr.disasm.value = Disassembly.DataMul(instr); } else { Computer.GetCPU().registers.WriteWord((uint)(instr.RD * 4), value); } }
//-------------------------------------------------------------- // Purpose: Creates disassembly for data processing instructions and sets it // Returns: Nothing //-------------------------------------------------------------- private static void SetDataDisassembly(Data instr, uint value, bool isMov) { op2Type op2 = Operation.CheckOperand2(instr); shiftType shift = Operation.CheckShiftType(instr); if (isMov) { switch (op2) { case op2Type.imm: instr.disasm.value = Disassembly.ImmMov(instr, value); break; case op2Type.reg_imm: instr.disasm.value = Disassembly.RegImmMov(instr); break; case op2Type.reg_reg: instr.disasm.value = Disassembly.RegRegMov(instr); break; } } else { switch (op2) { case op2Type.imm: instr.disasm.value = Disassembly.ImmData(instr, value); break; case op2Type.reg_imm: instr.disasm.value = Disassembly.RegImmData(instr); break; case op2Type.reg_reg: instr.disasm.value = Disassembly.RegRegData(instr); break; } } }