private void Andi(Instruction_I instruction) { int r1 = _registers.Read(instruction.RS).AsInt(); int result = (r1 & instruction.Immediate); _registers.Write(instruction.RT, result.AsBytes()); }
private void Lui(Instruction_I instruction) { int toLoad = instruction.Immediate << 16; var bytes = toLoad.AsBytes(); _registers.Write(instruction.RT, bytes); }
private void Sw(Instruction_I instruction) { int register = _registers.Read(instruction.RS).AsInt(); int address = register + instruction.Immediate; var word = _registers.Read(instruction.RT).Reverse().ToArray(); _memory.Write(address, word); }
private void Addi(Instruction_I instruction) { int registerValue = _registers.Read(instruction.RS).AsInt(); int imm = instruction.Immediate; var result = (registerValue + imm).AsBytes(); _registers.Write(instruction.RT, result); }
private void Ori(Instruction_I instruction) { var register = _registers.Read(instruction.RS).AsInt(); var result = register | instruction.Immediate; var bytes = result.AsBytes(); _registers.Write(instruction.RT, bytes); }
private int Bne(Instruction_I instruction, int pc) { int r1 = _registers.Read(instruction.RS).AsInt(); int r2 = _registers.Read(instruction.RT).AsInt(); if (r1 != r2) { return(pc + 4 + instruction.Immediate * 4); } return(pc + 4); }
private void Addiu(Instruction_I instruction) { int result = _registers.Read(instruction.RS).AsInt() + instruction.Immediate; _registers.Write(instruction.RT, result.AsBytes()); }