예제 #1
0
        private void Andi(Instruction_I instruction)
        {
            int r1     = _registers.Read(instruction.RS).AsInt();
            int result = (r1 & instruction.Immediate);

            _registers.Write(instruction.RT, result.AsBytes());
        }
예제 #2
0
        private void Lui(Instruction_I instruction)
        {
            int toLoad = instruction.Immediate << 16;
            var bytes  = toLoad.AsBytes();

            _registers.Write(instruction.RT, bytes);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }
예제 #7
0
        private void Addiu(Instruction_I instruction)
        {
            int result = _registers.Read(instruction.RS).AsInt() + instruction.Immediate;

            _registers.Write(instruction.RT, result.AsBytes());
        }