📄 unasm.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 + -