public void executeLDR() { int operand2int = Convert.ToInt32(operand2); if (u == 0) { operand2int *= -1; } //gettin rn if (p == 1) { addr = (uint)(myRegister.ReadWord(rn) + operand2int); } else if (p == 0) { addr = myRegister.ReadWord(rn); } //performing the load if (bs == 0) { if (!disassembling) { myRegister.WriteWord(rd, myMemory.ReadWord(addr)); } disassembly = "ldr" + Instructions.firstOpcode + " "; } else if (bs == 1) { if (!disassembling) { myRegister.WriteWord(rd, myMemory.ReadByte(addr)); } disassembly = "ldrb" + Instructions.firstOpcode + " "; } disassembly += "r" + Convert.ToString(rd); //writeback? if (p == 1 && w == 1) { if (!disassembling) { myRegister.WriteWord(rn, addr); } disassembly += "!"; } disassembly += ", [r" + Convert.ToString(rn) + opTwoDissasembly + "]"; }
//Method: Constructor //Purpose: Sets CPU up for use. //Variables: toMemory - Memory object that Computer setup. // toRegisters - Registers object that Computer setup. // programCounter - uint signifying where to start fetch at. public CPU(Memory toMemory, Registers toRegisters, uint programCounter) { disassembling = false; myMemory = toMemory; myRegisters = toRegisters; myRegisters.WriteWord(15, programCounter); }
public void executeMUL() { myRegister.WriteWord(rd, (myRegister.ReadWord(rs) * myRegister.ReadWord(rm))); }
public void executeB() { Computer.storedBranchPC = (int)myRegister.ReadWord(15) - 8; myRegister.WriteWord(15, myRegister.ReadWord(15) + 4 + targetAddr); }
public void executeMOV() { myRegister.WriteWord(rd, operand2); }