⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asm.java

📁 MIPS 仿真器
💻 JAVA
字号:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.*;
import java.lang.Integer;

public class Asm 
{
	public String hashreg(String s)
	{
		  if     (s.equals("$t0"))return "01000";
		  else if(s.equals("$t1"))return "01001";
		  else if(s.equals("$t2"))return "01010";
		  else if(s.equals("$t3"))return "01011";
		  else if(s.equals("$t4"))return "01100";
		  else if(s.equals("$t5"))return "01101";
		  else if(s.equals("$t6"))return "01110";
		  else if(s.equals("$t7"))return "01111";
		  else if(s.equals("$t8"))return "11000";
		  else if(s.equals("$t9"))return "11001";
		  else if(s.equals("$s0"))return "10000";
		  else if(s.equals("$s1"))return "10001";
		  else if(s.equals("$s2"))return "10010";
		  else if(s.equals("$s3"))return "10011";
		  else if(s.equals("$s4"))return "10100";
		  else if(s.equals("$s5"))return "10101";
		  else if(s.equals("$s6"))return "10110";
		  else if(s.equals("$s7"))return "10111";
		  else if(s.equals("$zero") || s.equals("$0"))return "00000";
		  else if(s.equals("$v0"))return "00010";		  
		  else if(s.equals("$v1"))return "00011";
		  else if(s.equals("$a0"))return "00100";
		  else if(s.equals("$a1"))return "00101";
		  else if(s.equals("$a2"))return "00110";
		  else if(s.equals("$a3"))return "00111";
		  else if(s.equals("$gp"))return "11100";
		  else if(s.equals("$sp"))return "11101";
		  else if(s.equals("$fp"))return "11110";
		  else if(s.equals("$ra"))return "11111";
		  else return "";
	}
	private String hashRop(String s)
	{
		  if     (s.equals("add"))return "100000";
		  else if(s.equals("sub"))return "100010";
		  else if(s.equals("and"))return "100100";
		  else if(s.equals("or"))return "100101";
		  else if(s.equals("nor"))return "100111";
		  else if(s.equals("sll"))return "000000";
		  else if(s.equals("srl"))return "000010";
		  else if(s.equals("slt"))return "101010";
		  else if(s.equals("jr"))return "001000";
		  else return "";
	}
	private String hashIop(String s)
	{
		  if     (s.equals("lw"))return "100011";
		  else if(s.equals("sw"))return "101011";
		  else if(s.equals("andi"))return "001100";
		  else if(s.equals("ori"))return "001101";
		  else if(s.equals("beq"))return "000100";
		  else if(s.equals("bne"))return "000101";
		  else if(s.equals("addi"))return "001000";
		  else if(s.equals("sb"))return "101000";
		  else if(s.equals("sh"))return "101001";
		  else if(s.equals("lb"))return "100100";
		  else if(s.equals("lh"))return "100101";
		  else if(s.equals("lui"))return "001111";
		  else if(s.equals("subi"))return "100011";
		  else return "";
	}
	private String hashJop(String s)
	{
		  if     (s.equals("j"))return "000010";
		  else if(s.equals("jal"))return "000011";
		  else return "";
	}
	private String toBin(int ii, int dd)
	{
		String s1,s2;
		int len,i;
		s1=Integer.toBinaryString(ii);
		len=s1.length();
		s2="";
		for (i=0;i<dd-len;i++ )
			s2=s2+"0";
		if (len>dd) s2=s1.substring(len-dd,len);
		else	s2=s2+s1;
//		//System.out.println("!!!!!!"+s2);
		return s2;
	}
	private String Rtype(String operator,String s)
	{
		int index;
		String tem="000000";
		String operand1,operand2,operand3;

		if(operator.equals("jr"))
		{
			tem = tem + hashreg(s) + "00000" + "00000" + "00000" + hashRop(operator);
		}
		else
		{
			index=s.indexOf(",");
			operand1=s.substring(0,index);
			s=s.substring(index+1).trim();

			index = s.indexOf(",");
			operand2 = s.substring(0,index);
			s = s.substring(index+1).trim();

			operand3 = s;

			if(operator.equals("sll")||operator.equals("srl"))
			{
				int a = Integer.parseInt(operand3);
				String m = toBin(a,5);
				tem = tem + "00000" + hashreg(operand2) + hashreg(operand1) + m + hashRop(operator); 
			}
			else
				tem = tem  + hashreg(operand2)  + hashreg(operand3)  + hashreg(operand1)  + "00000"  + hashRop(operator);

		}
		return tem;

	}
	private String Itype(String operator,String s,int currentl,PC pc)
	{
		int index;
		String tem="";
		String operand1,operand2,operand3;
		
		if(operator.equals("lw")||operator.equals("sw")||operator.equals("lb")||operator.equals("sb")||operator.equals("lh")||operator.equals("sh"))
		{
			index=s.indexOf(",");
			operand1=s.substring(0,index);
			s=s.substring(index+1).trim();
		    int index1=s.indexOf("(");
			int index2=s.indexOf(")");
		    operand2=s.substring(index1+1,index2).trim();
     	    operand3=s.substring(0,index1).trim();
			int a = Integer.parseInt(operand3);
			String m = toBin(a,16);
			tem = tem + hashIop(operator) + hashreg(operand2) + hashreg(operand1) + m;
		}
		else if (operator.equals("lui"))
		{
			String m;
			index=s.indexOf(",");
			operand1=s.substring(0,index);
			s=s.substring(index+1).trim();
			int a = Integer.parseInt(s);
			m = toBin(a,16);
			tem = tem + hashIop(operator) + "00000" + hashreg(operand1) + m;
		}
		else
		{
			String m;
			index=s.indexOf(",");
			operand1=s.substring(0,index);
			s=s.substring(index+1).trim();

			index = s.indexOf(",");
			operand2 = s.substring(0,index);
			s = s.substring(index+1).trim();
////System.out.println(s);
			if(operator.equals("beq")||operator.equals("bne"))
			{
//				m = toBin(a/4,16);
////System.out.println(pc.label.get(s).toString());
				m=toBin((Integer.parseInt(pc.label.get(s).toString())-currentl-1),16);

			    tem = tem + hashIop(operator) + hashreg(operand1) + hashreg(operand2) + m;
			}
			else 
			{
				int a = Integer.parseInt(s);
				m = toBin(a,16);
				tem = tem + hashIop(operator) + hashreg(operand2) + hashreg(operand1) + m;
			}
		}
		return tem;
	}
	private String Jtype(String operator,String s,int currentl,PC pc)
	{
		int index;
		String tem="";
//要判断是否标号
			int a = Integer.parseInt(pc.label.get(s).toString());
			String m = toBin(a,26);
			tem = tem + hashJop(operator) + m;
			return tem;
	}
	public String StoB(String s, int currentl,PC pc) 
	{
		  int index;
		  String operator;
		  String binarycode;
		  index=s.indexOf(" ");
		  operator=s.substring(0,index).trim().toLowerCase();
		  s=s.substring(index+1).trim();
		  if (operator.equals("add")||operator.equals("sub")||operator.equals("and")||operator.equals("or")
			  ||operator.equals("nor")||operator.equals("sll")||operator.equals("srl")||operator.equals("slt")
			  ||operator.equals("jr"))
			  binarycode = Rtype(operator,s);

		  else if(operator.equals("j")||operator.equals("jal"))
			  binarycode = Jtype(operator,s,currentl,pc);

		  else if(operator.equals("end"))
			  binarycode = "11111100000000000000000000000001";

		  else if(operator.equals("dw"))
		  {
			  int a = Integer.parseInt(s);
			  binarycode = toBin(a,32);
		  }
		  else
			  binarycode = Itype(operator,s,currentl,pc);

			  return binarycode;	  
	}
	public String BtoH(String s)
	{
		String rob = "";
		String t;
		int i,a;
		for(i=0;i<8;i++)
		{
			int sum=0;
			int b = 8;
			t = s.substring(0,3);
			for(int j=0;j<4;j++)
			{
				a = Integer.parseInt(s.substring(j,j+1));
				sum += a * b;
				b /= 2;
			}
			rob += Integer.toHexString(sum);
			s=s.substring(4).trim();
		}
		return rob;

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -