Пример #1
0
        public CmdBase GetCmd(string instruction, CmdInfo info, string label)
        {
            //lw $t2,0($s2)
            var split = instruction.Split(' ');
            var regSplit = split[1].Split(',');
            int rt = Register.Translate(regSplit[0]);

            if (instruction.Contains("("))
            {
                int posBOpen = 0;
                int posBClose = 0;
                var chars = regSplit[1].ToCharArray();
                for (int i = 0; i < chars.Length; i++)
                {
                    if (chars[i] == '(') posBOpen = i;
                    if (chars[i] == ')') posBClose = i;
                }

                string num = regSplit[1].Substring(0, posBOpen);
                int value = Convert.ToInt32(num);
                string bracket = regSplit[1].Substring(posBOpen + 1, posBClose - (posBOpen + 1));
                int rs = Register.Translate(bracket);


                return new CmdLW(info, (byte)rs, (byte)rt, (short)value,"",  label);
            }

            //lw $s3, n		# n in $s3 laden 
            //pseudo instruct
            return new CmdLW(info, 0, (byte)rt, 0, split[2], label);
        }
Пример #2
0
        public CmdBase GetCmd(string instruction, CmdInfo info, string label)
        {
            //add $t7,$t3,$s0
            var split = instruction.Split(' ');
            var regSplit = split[1].Split(',');
            int rd = Register.Translate(regSplit[0]);
            int rt = Register.Translate(regSplit[1]);
            int shift = Convert.ToInt32(regSplit[2]);

            CmdR cmd = new CmdShift(info, 0, (byte)rt, (byte)rd, (byte)shift, info.funct, label);
            return cmd;
        }
Пример #3
0
        public CmdBase GetCmd(string instruction, CmdInfo info, string label)
        {

            //generic
            //addi $s1,$s1,4
            //lw $t2,0($s2)
            //bne $t3,$zero,nimm2 
            var split = instruction.Split(' ');
            var regSplit = split[1].Split(',');
            int rd = Register.Translate(regSplit[0]);
            int rs = Register.Translate(regSplit[1]);
            string jumpLabel = regSplit[2];

            CmdI cmd = new CmdBranch(info, (byte)rs, (byte)rd, jumpLabel, label);
            return cmd;
        }
Пример #4
0
        public CmdBase GetCmd(string instruction, CmdInfo info, string label)
        {
            //specials
            switch (info.name)
            {
                case "la":
                case "lw":
                case "sw":
                    return new FormatLW().GetCmd(instruction, info, label);
                case "beq":
                case "bne":
                    return new FormatBeq().GetCmd(instruction, info, label);
            };


            //generic
            //addi $s1,$s1,4
            //lw $t2,0($s2)
            //bne $t3,$zero,nimm2 
            var split = instruction.Split(' ');
            var regSplit = split[1].Split(',');
            int rd = Register.Translate(regSplit[0]);
            int rs = Register.Translate(regSplit[1]);
            int value = Convert.ToInt32(regSplit[2]);

            CmdI cmd;
            switch (info.name)
            {
                case "addi":
                    cmd = new CmdAddi(info, (byte)rs, (byte)rd, (short)value, label);
                    break;
                default:
                    cmd = new CmdI(info, (byte)rs, (byte)rd, (short)value, label);
                    break;
            }

            return cmd;
        }
Пример #5
0
        public CmdBase GetCmd(string instruction, CmdInfo info, string label)
        {
            //specials
            switch (info.name)
            {
                case "sll":
                case "srl":
                case "sra":
                    return new FormatShift().GetCmd(instruction, info, label);
            }


            //generic
            //add $t7,$t3,$s0
            var split = instruction.Split(' ');
            var regSplit = split[1].Split(',');
            int rd = Register.Translate(regSplit[0]);
            int rs = Register.Translate(regSplit[1]);
            int rt = Register.Translate(regSplit[2]);

            CmdR cmd;

            switch (info.name)
            {
                case "add":
                case "sub":
                    cmd = new CmdAddR(info, (byte)rs, (byte)rt, (byte)rd, 0, info.funct, label);
                    break;
                case "slt":
                    cmd = new CmdSlt(info, (byte)rs, (byte)rt, (byte)rd, 0, info.funct, label);
                    break;
                default:
                    cmd = new CmdR(info, (byte)rs, (byte)rt, (byte)rd, 0, info.funct, label);
                    break;
            }
            return cmd;
        }
Пример #6
0
 public CmdBase GetCmd(string instruction, CmdInfo info, string label)
 {
     var split = instruction.Split(' ');
     CmdJ cmd = new CmdJ(info, split[1], label);
     return cmd;
 }