Added Instruktions
This commit is contained in:
parent
6ea2a7e735
commit
77cae7467e
@ -22,5 +22,14 @@
|
||||
#define RSF 14
|
||||
#define PUSHL 15
|
||||
#define POPL 16
|
||||
#define EQ 17
|
||||
#define NE 18
|
||||
#define LT 19
|
||||
#define LE 20
|
||||
#define GT 21
|
||||
#define GE 22
|
||||
#define JMP 23
|
||||
#define BRF 24
|
||||
#define BRT 25
|
||||
|
||||
#endif /* ifndef INSREUKTION */
|
||||
|
||||
31
njvm.c
31
njvm.c
@ -112,6 +112,37 @@ void execute(struct program *program, struct sda *sda) {
|
||||
currentFrame = stack.frames[stack.currentFrame];
|
||||
currentFrame->fp[SIGN_EXTEND(IMMEDIATE(instruction))] = pop(&stack);
|
||||
break;
|
||||
case EQ:
|
||||
push(&stack,pop(&stack)==pop(&stack));
|
||||
break;
|
||||
case NE:
|
||||
push(&stack,pop(&stack)!=pop(&stack));
|
||||
break;
|
||||
case LT:
|
||||
push(&stack, pop(&stack)<pop(&stack));
|
||||
break;
|
||||
case LE:
|
||||
push(&stack,pop(&stack)<=pop(&stack));
|
||||
break;
|
||||
case GT:
|
||||
push(&stack, pop(&stack)>pop(&stack));
|
||||
break;
|
||||
case GE:
|
||||
push(&stack,pop(&stack)>=pop(&stack));
|
||||
break;
|
||||
case JMP:
|
||||
i = SIGN_EXTEND(IMMEDIATE(instruction));
|
||||
break;
|
||||
case BRF:
|
||||
if (pop(&stack)==0){
|
||||
i = SIGN_EXTEND(IMMEDIATE(instruction));
|
||||
}
|
||||
break;
|
||||
case BRT:
|
||||
if (pop(&stack)==1){
|
||||
i = SIGN_EXTEND(IMMEDIATE(instruction));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
24
program.c
24
program.c
@ -75,6 +75,30 @@ void printProgram(struct program *program) {
|
||||
case POPL:
|
||||
strcpy(c, "popl");
|
||||
break;
|
||||
case EQ:
|
||||
strcpy(c,"eq");
|
||||
break;
|
||||
case NE:
|
||||
strcpy(c,"ne");
|
||||
break;
|
||||
case LT:
|
||||
strcpy(c,"lt");
|
||||
break;
|
||||
case GT:
|
||||
strcpy(c,"gt");
|
||||
break;
|
||||
case GE:
|
||||
strcpy(c,"ge");
|
||||
break;
|
||||
case JMP:
|
||||
strcpy(c,"jmp");
|
||||
break;
|
||||
case BRF:
|
||||
strcpy(c, "brf");
|
||||
break;
|
||||
case BRT:
|
||||
strcpy(c,"brt");
|
||||
break;
|
||||
default:
|
||||
strcpy(c, "ERROR");
|
||||
break;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user