Guest User

Untitled

a guest
Aug 11th, 2021
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const { writeFileSync } = require("fs");
  2.  
  3. let opcount = 0;
  4. let result = '';
  5.  
  6. function writeset(a, x) {
  7.     ++opcount;
  8.     result += `set ${a} ${x}\n`; // rega=x
  9. }
  10. function writeload(a, b) {
  11.     ++opcount;
  12.     result += `load ${a} ${b}\n`; // rega=mem[regb]
  13. }
  14. function writestore(a, b) {
  15.     ++opcount;
  16.     result += `store ${a} ${b}\n`; // mem[rega]=regb
  17. }
  18.  
  19. writeset(2, 0); // reg2=0
  20. writeload(2, 2); // reg2=mem[reg2] ∴ reg2=operand1
  21. writeset(3, 1); // reg3=1
  22. writeload(3, 3); // reg3=mem[reg3] ∴ reg3=operand2
  23.  
  24. for (let i = 0; i < 256; ++i) { // 보수 테이블
  25.     writeset(4, i); // reg4=i
  26.     writeset(5, (256 - i) % 256); // reg5=(256-i)%256
  27.     writestore(4, 5); // mem[reg4]=reg5
  28. }
  29. writeload(2, 2); // reg2=comp-operand1 -> operand1을 보수로 바꿈
  30.  
  31. for (let i = 0; i < 256; ++i) { // (N+1)%256 테이블
  32.     writeset(4, i); // reg4=i
  33.     writeset(5, (i + 1) % 256); // reg5=(i+1)%256
  34.     writestore(4, 5); // mem[reg4]=reg5
  35. }
  36.  
  37. //        0                1                 2
  38. // [comp-operand1] [comp-operand1+1] [comp-operand1+2] ...
  39. // ∴ mem[i]=i-(comp-operand1)=i-(256-operand1)=i-256+operand1=i+operand1
  40. // prevaddrreg=2 currentaddrreg=4 <-> prevaddrreg=4 currentaddrreg=2
  41. /*
  42. writeload(4, 2); // reg4=mem[comp-operand1]
  43. writeset(5, 0); // reg5=0
  44. writestore(2, 5); // mem[comp-operand1]=reg5
  45. writeload(2, 4); // reg2=mem[reg4]
  46. writeset(5, 1); // reg5=1
  47. writestore(4, 5); // mem[reg4]=reg5
  48. ...
  49. */
  50. let prevaddrreg = 2;
  51. let currentaddrreg = 4;
  52. for (let i = 0; i < 256; ++i) {
  53.     writeload(currentaddrreg, prevaddrreg);
  54.     writeset(5, i);
  55.     writestore(prevaddrreg, 5);
  56.     [prevaddrreg, currentaddrreg] = [currentaddrreg, prevaddrreg];
  57. }
  58.  
  59. writeload(0, 3); // reg0=mem[reg3]
  60.  
  61. writeFileSync('./code-output', `${opcount}\n${result}`);
Advertisement
Add Comment
Please, Sign In to add comment