Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const { writeFileSync } = require("fs");
- let opcount = 0;
- let result = '';
- function writeset(a, x) {
- ++opcount;
- result += `set ${a} ${x}\n`; // rega=x
- }
- function writeload(a, b) {
- ++opcount;
- result += `load ${a} ${b}\n`; // rega=mem[regb]
- }
- function writestore(a, b) {
- ++opcount;
- result += `store ${a} ${b}\n`; // mem[rega]=regb
- }
- writeset(2, 0); // reg2=0
- writeload(2, 2); // reg2=mem[reg2] ∴ reg2=operand1
- writeset(3, 1); // reg3=1
- writeload(3, 3); // reg3=mem[reg3] ∴ reg3=operand2
- for (let i = 0; i < 256; ++i) { // 보수 테이블
- writeset(4, i); // reg4=i
- writeset(5, (256 - i) % 256); // reg5=(256-i)%256
- writestore(4, 5); // mem[reg4]=reg5
- }
- writeload(2, 2); // reg2=comp-operand1 -> operand1을 보수로 바꿈
- for (let i = 0; i < 256; ++i) { // (N+1)%256 테이블
- writeset(4, i); // reg4=i
- writeset(5, (i + 1) % 256); // reg5=(i+1)%256
- writestore(4, 5); // mem[reg4]=reg5
- }
- // 0 1 2
- // [comp-operand1] [comp-operand1+1] [comp-operand1+2] ...
- // ∴ mem[i]=i-(comp-operand1)=i-(256-operand1)=i-256+operand1=i+operand1
- // prevaddrreg=2 currentaddrreg=4 <-> prevaddrreg=4 currentaddrreg=2
- /*
- writeload(4, 2); // reg4=mem[comp-operand1]
- writeset(5, 0); // reg5=0
- writestore(2, 5); // mem[comp-operand1]=reg5
- writeload(2, 4); // reg2=mem[reg4]
- writeset(5, 1); // reg5=1
- writestore(4, 5); // mem[reg4]=reg5
- ...
- */
- let prevaddrreg = 2;
- let currentaddrreg = 4;
- for (let i = 0; i < 256; ++i) {
- writeload(currentaddrreg, prevaddrreg);
- writeset(5, i);
- writestore(prevaddrreg, 5);
- [prevaddrreg, currentaddrreg] = [currentaddrreg, prevaddrreg];
- }
- writeload(0, 3); // reg0=mem[reg3]
- writeFileSync('./code-output', `${opcount}\n${result}`);
Advertisement
Add Comment
Please, Sign In to add comment