Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- declare register AR(15:0), DR(19:0), SP(15:0), PC(15:0);
- declare memory MEM(AR,DR);
- INIT: PC <- 0, AR <- 0, SP <- $FFFF, DR <- 0;
- FETCH: AR <- PC;
- read MEM, PC <- PC + 1 |
- switch DR(19:16) { case 0: goto PUSH
- case 1: goto POP
- case 2: goto SUB
- case 3: goto NOT
- case 4: goto JNZ
- default: goto FETCH };
- PUSH: AR <- DR(15:0), SP <- SP - 1;
- read MEM, AR <- SP;
- write MEM | goto FETCH;
- POP: AR <- SP, if SP <> $FFFF then SP <- SP + 1 fi;
- read MEM, AR <- DR(15:0);
- write MEM | goto FETCH;
- SUB: AR <- SP, SP <- SP + 1;
- read MEM, AR <- SP;
- AR <- DR(15:0), read MEM;
- AR <- AR - DR(15:0);
- DR(15:0) <- AR, AR <- SP;
- write MEM | goto FETCH;
- NOT: AR <- SP;
- read MEM;
- AR <- not DR(15:0);
- DR(15:0) <- AR, AR <- SP;
- write MEM | goto FETCH;
- JNZ: AR <- SP, SP <- SP + 1;
- read MEM;
- if DR(15:0) <> 0 then goto JNZ1 fi;
- SP <- SP + 1 | goto FETCH;
- JNZ1: AR <- SP, SP <- SP + 1;
- read MEM;
- PC <- DR(15:0) | goto FETCH;
Advertisement
Add Comment
Please, Sign In to add comment