Zorbing

[TGI] Register-Register-Maschine

Jun 6th, 2013
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. declare register AR(15:0), DR(19:0), SP(15:0), PC(15:0);
  2. declare memory MEM(AR,DR);
  3. INIT:   PC <- 0, AR <- 0, SP <- $FFFF, DR <- 0;
  4. FETCH:  AR <- PC;
  5.     read MEM, PC <- PC + 1 |
  6.         switch DR(19:16) { case 0: goto PUSH
  7.             case 1: goto POP
  8.             case 2: goto SUB
  9.             case 3: goto NOT
  10.             case 4: goto JNZ
  11.             default: goto FETCH };
  12. PUSH:   AR <- DR(15:0), SP <- SP - 1;
  13.     read MEM, AR <- SP;
  14.     write MEM | goto FETCH;
  15. POP:    AR <- SP, if SP <> $FFFF then SP <- SP + 1 fi;
  16.     read MEM, AR <- DR(15:0);
  17.     write MEM | goto FETCH;
  18. SUB:    AR <- SP, SP <- SP + 1;
  19.     read MEM, AR <- SP;
  20.     AR <- DR(15:0), read MEM;
  21.     AR <- AR - DR(15:0);
  22.     DR(15:0) <- AR, AR <- SP;
  23.     write MEM | goto FETCH;
  24. NOT:    AR <- SP;
  25.     read MEM;
  26.     AR <- not DR(15:0);
  27.     DR(15:0) <- AR, AR <- SP;
  28.     write MEM | goto FETCH;
  29. JNZ:    AR <- SP, SP <- SP + 1;
  30.     read MEM;
  31.     if DR(15:0) <> 0 then goto JNZ1 fi;
  32.     SP <- SP + 1 | goto FETCH;
  33. JNZ1:   AR <- SP, SP <- SP + 1;
  34.     read MEM;
  35.     PC <- DR(15:0) | goto FETCH;
Advertisement
Add Comment
Please, Sign In to add comment