SHARE
TWEET

Untitled

a guest Sep 17th, 2019 94 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package inclass;
  2.  
  3. import java.util.*;
  4.  
  5. public class Assembler {
  6.  
  7.     public static LinkedList<Integer> wordlist = new LinkedList<Integer>();
  8.  
  9.     public static int makeI(byte opcode, byte rs, byte rt, short immed) {
  10.         int result = 0;
  11.         result |= opcode << 26;
  12.         result |= rs << 21;
  13.         result |= rt << 16;
  14.         result |= immed;
  15.  
  16.         return result;
  17.     }
  18.  
  19.     public static int makeR(byte opcode, int rs, int rt, int rd, byte shamt, byte funct) {
  20.         int result = 0;
  21.         result |= opcode << 26;
  22.         result |= rs << 21;
  23.         result |= rt << 16;
  24.         result |= rd << 11;
  25.         result |= shamt << 6;
  26.         result |= funct;
  27.  
  28.         return result;
  29.     }
  30.  
  31.     public static byte reg2bin(String w) {
  32.         byte reg = 0;
  33.         switch (w) {
  34.         case "$zero":
  35.             reg = 0;
  36.             break;
  37.         case "$v0":
  38.             reg = 2;
  39.             break;
  40.         case "$v1":
  41.             reg = 3;
  42.             break;
  43.         case "$a0":
  44.             reg = 4;
  45.             break;
  46.         case "$a1":
  47.             reg = 5;
  48.             break;
  49.         case "$a2":
  50.             reg = 6;
  51.             break;
  52.         case "$a3":
  53.             reg = 7;
  54.             break;
  55.         case "$t0":
  56.             reg = 8;
  57.             break;
  58.         case "$t1":
  59.             reg = 9;
  60.             break;
  61.         case "$t2":
  62.             reg = 10;
  63.             break;
  64.         case "$t3":
  65.             reg = 11;
  66.             break;
  67.         case "$t4":
  68.             reg = 12;
  69.             break;
  70.         case "$t5":
  71.             reg = 13;
  72.             break;
  73.         case "$t6":
  74.             reg = 14;
  75.             break;
  76.         case "$t7":
  77.             reg = 15;
  78.             break;
  79.         case "$s0":
  80.             reg = 16;
  81.             break;
  82.         case "$s1":
  83.             reg = 17;
  84.             break;
  85.         case "$s2":
  86.             reg = 18;
  87.             break;
  88.         case "$s3":
  89.             reg = 19;
  90.             break;
  91.         case "$s4":
  92.             reg = 20;
  93.             break;
  94.         case "$s5":
  95.             reg = 21;
  96.             break;
  97.         case "$s6":
  98.             reg = 22;
  99.             break;
  100.         case "$s7":
  101.             reg = 23;
  102.             break;
  103.  
  104.         }
  105.  
  106.         return reg;
  107.     }
  108.  
  109.     public static void main(String[] args) {
  110.         Scanner kb = new Scanner(System.in);
  111.         System.out.println("Assembler - C. Grey");
  112.  
  113.         String op = null;
  114.         byte opcode = 0;
  115.         String rs, rt, rd;
  116.         byte shamt = 0;
  117.         byte func = 0;
  118.         byte rscode = 0;
  119.         byte rtcode = 0;
  120.         byte rdcode = 0;
  121.         int word = 0;
  122.         short immed = 0;
  123.         short branch_address;
  124.  
  125.         System.out.println("Begin assembly");
  126.  
  127.         do {
  128.  
  129.             /*
  130.              * op = null; rs = null; rt = null; rd = null; shamt = 0; func = 0; opcode = 0;
  131.              * rscode = 0; rtcode = 0; rdcode = 0; word = 0;
  132.              */
  133.  
  134.             op = kb.next();
  135.  
  136.             if (op.equalsIgnoreCase("HALT")) {
  137.  
  138.                 continue;
  139.             }
  140.  
  141.             else {
  142.  
  143.                 rd = kb.next();
  144.                 rs = kb.next();
  145.                 rt = kb.next();
  146.  
  147.             }
  148.  
  149.             if (isNumeric(rd) == true) {
  150.                 immed = Short.parseShort(rd);
  151.                 rscode = reg2bin(rs);
  152.                 rtcode = reg2bin(rt);
  153.             }
  154.  
  155.             else if (isNumeric(rs) == true) {
  156.                 immed = Short.parseShort(rs);
  157.                 rtcode = reg2bin(rt);
  158.                 rdcode = reg2bin(rd);
  159.             }
  160.  
  161.             else if (isNumeric(rt) == true) {
  162.                 immed = Short.parseShort(rt);
  163.                 rdcode = reg2bin(rd);
  164.                 rscode = reg2bin(rs);
  165.             }
  166.  
  167.             else {
  168.  
  169.                 rdcode = reg2bin(rd);
  170.                 rscode = reg2bin(rs);
  171.                 rtcode = reg2bin(rt);
  172.             }
  173.  
  174.             switch (op) {
  175.  
  176.             case "ADD":
  177.                 opcode = 0;
  178.                 func = 32;
  179.                 shamt = 0;
  180.                 word = makeR(opcode, rscode, rtcode, rdcode, shamt, func);
  181.                 break;
  182.             case "AND":
  183.                 opcode = 0;
  184.                 func = 36;
  185.                 shamt = 0;
  186.                 word = makeR(opcode, rscode, rtcode, rdcode, shamt, func);
  187.                 break;
  188.             case "ADDI":
  189.                 opcode = 8;
  190.                 word = makeI(opcode, rscode, rtcode, immed);
  191.                 break;
  192.             case "ANDI":
  193.                 opcode = 12;
  194.                 word = makeI(opcode, rscode, rtcode, immed);
  195.                 break;
  196.             case "BEQ":
  197.                 opcode = 4;
  198.                 word = makeI(opcode, rscode, rtcode, immed);
  199.                 break;
  200.             case "LW":
  201.                 opcode = 35;
  202.                 word = makeI(opcode, rscode, rtcode, immed);
  203.                 break;
  204.                
  205.                
  206.  
  207.             }
  208.  
  209.             wordlist.add(word);
  210.  
  211.         } while (!op.equalsIgnoreCase("HALT"));
  212.  
  213.         for (int i = 0; i < wordlist.size(); i++) {
  214.             System.out.println(
  215.                     "***: " + String.format("%32s", Integer.toBinaryString(wordlist.get(i))).replace(" ", "0"));
  216.         }
  217.  
  218.         System.out.println("Assembly complete. Program required " + wordlist.size() + " words of memory.");
  219.     }
  220.  
  221.     public static boolean isNumeric(String str) {
  222.         try {
  223.             Double.parseDouble(str);
  224.             return true;
  225.         } catch (NumberFormatException e) {
  226.             return false;
  227.         }
  228.     }
  229.  
  230. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top