Advertisement
Guest User

Untitled

a guest
Sep 17th, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.03 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement