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

📄 unasm.java

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

public class Unasm
{
	private String hashreg(String s)
	{
		if     (s.equals("01000"))return "$t0";
		else if(s.equals("01001"))return "$t1";
		else if(s.equals("01010"))return "$t2";
		else if(s.equals("01011"))return "$t3";
		else if(s.equals("01100"))return "$t4";
		else if(s.equals("01101"))return "$t5";
		else if(s.equals("01110"))return "$t6";
		else if(s.equals("01111"))return "$t7";
		else if(s.equals("11000"))return "$t8";
		else if(s.equals("11001"))return "$t9";
		else if(s.equals("10000"))return "$s0";
		else if(s.equals("10001"))return "$s1";
		else if(s.equals("10010"))return "$s2";
		else if(s.equals("10011"))return "$s3";
		else if(s.equals("10100"))return "$s4";
		else if(s.equals("10101"))return "$s5";
		else if(s.equals("10110"))return "$s6";
		else if(s.equals("10111"))return "$s7";
		else if(s.equals("00000"))return "$zero";
		else if(s.equals("00010"))return "$v0";		  
		else if(s.equals("00011"))return "$v1";
		else if(s.equals("00100"))return "$a0";
		else if(s.equals("00101"))return "$a1";
		else if(s.equals("00110"))return "$a2";
		else if(s.equals("00111"))return "$a3";
		else if(s.equals("11100"))return "$gp";
		else if(s.equals("11101"))return "$sp";
		else if(s.equals("11110"))return "$fp";
		else if(s.equals("11111"))return "$ra";

		else return "";
	}

	private String hashRop(String s)
	{
		if     (s.equals("100000"))return "add";
		else if(s.equals("100010"))return "sub";
		else if(s.equals("100100"))return "and";
		else if(s.equals("100101"))return "or";
		else if(s.equals("100111"))return "nor";
		else if(s.equals("000000"))return "sll";
		else if(s.equals("000010"))return "srl";
		else if(s.equals("101010"))return "slt";
		else if(s.equals("001000"))return "jr";
		else return "";
	}
	private String hashIop(String s)
	{
	    if	   (s.equals("100011"))return "lw";
		else if(s.equals("101011"))return "sw";
		else if(s.equals("001100"))return "andi";
		else if(s.equals("001101"))return "ori";
		else if(s.equals("000100"))return "beq";
		else if(s.equals("000101"))return "bne";
		else if(s.equals("001000"))return "addi";
		else if(s.equals("101000"))return "sb";
		else if(s.equals("101001"))return "sh";
		else if(s.equals("100100"))return "lb";
		else if(s.equals("100101"))return "lh";
		else if(s.equals("001111"))return "lui";
		else if(s.equals("100011"))return "subi";
		else return "";
	}
	private String hashJop(String s)
	{
		if	   (s.equals("000010"))return "j";
		else if(s.equals("000011"))return "jal";
		else return "";
	}
	private String hashbinary(char m)
	{
		if	   (m=='0')return "0000";
		else if(m=='1')return "0001";
		else if(m=='2')return "0010";
		else if(m=='3')return "0011";
		else if(m=='4')return "0100";
		else if(m=='5')return "0101";
		else if(m=='6')return "0110";
		else if(m=='7')return "0111";
		else if(m=='8')return "1000";
		else if(m=='9')return "1001";
		else if(m=='a'||m=='A')return "1010";
		else if(m=='b'||m=='B')return "1011";
		else if(m=='c'||m=='C')return "1100";
		else if(m=='d'||m=='D')return "1101";
		else if(m=='e'||m=='E')return "1110";
		else if(m=='f'||m=='F')return "1111";
		else return "";
	}
	private String Rtype(String s)
	{
		String a = s.substring(0,20);
		String operand1,operand2,operand3;
		String tmp;
		s = s.substring(20);
		if(hashRop(s).equals("sll")||hashRop(s).equals("srl"))
		{
			operand2 = a.substring(5,10);
			operand1 = a.substring(10,15);
			operand3 = a.substring(15);
			tmp = hashRop(s) + " " + hashreg(operand1) + "," + hashreg(operand2) + "," + Integer.parseInt(operand3,2);
  		}
		else if(hashRop(s).equals("jr"))
		{
			operand1 = a.substring(0,5);
			tmp = hashRop(s) + " " + hashreg(operand1);
		}

		else
		{
			operand2 = a.substring(0,5);
			operand3 = a.substring(5,10);
			operand1 = a.substring(10,15);
			tmp = hashRop(s) + " " + hashreg(operand1) + "," + hashreg(operand2) + "," +hashreg(operand3);
		}
		return tmp;
	}
	private String Itype(String a,String s,int currentl,PC pc)
	{
		String operand1,operand2,operand3;
		String tmp="";
		if(hashIop(a).equals("lw")||hashIop(a).equals("sw")||hashIop(a).equals("lb")||hashIop(a).equals("sb")||hashIop(a).equals("lh")||hashIop(a).equals("sh"))
		{
			operand2 = s.substring(0,5);
			operand1 = s.substring(5,10);
			operand3 = s.substring(10);
			tmp = hashIop(a) + " " + hashreg(operand1) + ", " + Integer.parseInt(operand3,2) + "(" + hashreg(operand2) + ")";
		}
		else if(hashIop(a).equals("beq")||hashIop(a).equals("bne"))
		{
			operand1 = s.substring(0,5);
			operand2 = s.substring(5,10);
			operand3 = s.substring(10);
			int p = currentl + 1 + Integer.parseInt(operand3,2);
			String m = "";
			try
			{
				m = new NewHEX().toHEX(p*4,8);
			}
			catch (Exception ee)
			{
			}
//			//System.out.println(m);
			tmp = hashIop(a) + " " + hashreg(operand1) + "," + hashreg(operand2) + "," + m;
		}
		else if (hashIop(a).equals("lui"))
		{
			operand1 = s.substring(5,10);
			operand3 = s.substring(10);
			tmp = hashIop(a) + " " + hashreg(operand1)+"," + Integer.parseInt(operand3,2);
		}
		else
		{
			operand2 = s.substring(0,5);
			operand1 = s.substring(5,10);
			operand3 = s.substring(10);
			tmp = hashIop(a) + " " + hashreg(operand1) + "," + hashreg(operand2) + "," + Integer.parseInt(operand3,2);
		}
		return tmp;
	}
	private String Jtype(String a,String s,int currentl,PC pc)
	{
		String operand1,operand2,operand3;
		String tmp="";
		int p = Integer.parseInt(s,2);
		//System.out.println("-----"+p);
		String m = "";
		try
		{
			m = new NewHEX().toHEX(p*4,8);
		}
		catch (Exception ee)
		{
		}
		tmp = hashJop(a) + " " + m;
		return tmp;
	}

	public String BtoS(String s,int currentl,PC pc)
	{
		int index;
		String tmp="";
		for(int i=0;i<8;i++)
			tmp += hashbinary(s.charAt(i));
		String a = tmp.substring(0,6);
		tmp = tmp.substring(6);
		String mips;
		if(a.equals("000000"))
			mips = Rtype(tmp);
		else if(a.equals("000010")||a.equals("000011"))
			mips = Jtype(a,tmp,currentl,pc);
		else mips = Itype(a,tmp,currentl,pc);
		return mips;
	}
}

⌨️ 快捷键说明

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