Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- declare register AR(15:0), DR(19:0), IR(3:0), SP(15:0), TEMP(15:0), PC(15:0);
- declare memory MEM(AR,DR);
- INIT: PC <- 0, AR <- 0, SP <- $FFFF, DR <- 0, TEMP <- 0; # c0
- FETCH: AR <- PC; # c1
- read MEM; # c2
- PC <- PC + 1, # c3
- IR <- DR(19:16) | # c4
- switch IR { case 0: goto PUSH # k0
- case 1: goto POP # k1
- case 2: goto SUB # k2
- case 3: goto NOT # k3
- case 4: goto JNZ # k4
- default: goto FETCH };
- PUSH: AR <- DR(15:0), # c5
- SP <- SP - 1; # c6
- read MEM, # c2
- AR <- SP; # c7
- write MEM | goto FETCH; # c8
- POP: AR <- SP, # c7
- if SP <> $FFFF then # k6
- SP <- SP + 1 # c9
- fi;
- read MEM, # c2
- AR <- DR(15:0); # c5
- write MEM | goto FETCH; # c8
- SUB: AR <- SP, # c7
- SP <- SP + 1; # c9
- read MEM, # c2
- AR <- SP; # c7
- TEMP <- DR(15:0), # cA
- read MEM; # c2
- TEMP <- TEMP - DR(15:0); # cB
- DR(15:0) <- TEMP; # cC
- write MEM | goto FETCH; # c8
- NOT: AR <- SP; # c7
- read MEM; # c2
- TEMP <- not DR(15:0); # cD
- DR(15:0) <- TEMP; # cC
- write MEM | goto FETCH; # c8
- JNZ: AR <- SP, # c7
- SP <- SP + 1; # c9
- read MEM; # c2
- TEMP <- DR(15:0); # cA
- if TEMP <> 0 then goto JNZ1 fi; # k7
- SP <- SP + 1 | goto FETCH; # c9
- JNZ1: AR <- SP, # c7
- SP <- SP + 1; # c9
- read MEM; # c2
- PC <- DR(15:0) | goto FETCH; # cE
Advertisement
Add Comment
Please, Sign In to add comment