Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdbool.h>
- bool running = true; //check running status
- int ip = 0; //Instuction Pointer
- int sp = -1; //Stack Pointer
- int stack[256]; //VM's Ram
- typedef enum {
- PSH,
- ADD,
- POP,
- HLT
- } InstructionSet; //supported opcodes for VM
- const int program[] = {
- PSH, 5,
- PSH, 6,
- ADD,
- POP,
- HLT
- }; //code to be executed inside VM
- int fetch() {
- return program[ip];
- }
- void eval(int instr) { //VM implementation
- switch(instr) {
- case HLT: {
- running=false;
- printf("Done\n");
- break;
- }
- case PSH: {
- sp++;
- stack[sp] = program[++ip];
- break;
- }
- case POP: {
- int val_popped = stack[sp--];
- printf("popped %d \n",val_popped);
- break;
- }
- case ADD: {
- int a=stack[sp--];
- int b=stack[sp--];
- int result = b+a;
- sp++;
- stack[sp]=result;
- break;
- }
- }
- }
- int main() {
- while(running) {
- eval(fetch());
- ip++;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement