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); }
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; }
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; }
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; }
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; }
public CmdBase GetCmd(string instruction, CmdInfo info, string label) { var split = instruction.Split(' '); CmdJ cmd = new CmdJ(info, split[1], label); return cmd; }