0x01 문자열 입력
0x02 문자열 출력
0x03 스택 할당
0x04 스택 push
0x05 스택 pop
0x06 더하기
0x07 빼기
0x08 프로그램 종료

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char prog[] = {0x01, 0x05, 0x02, 0x06, 0x03, 0x07, 0x08};

int main() {
    int a, b;
    int stack[1000], stack_ptr = 0;
    char str[1000];

    for (int i = 0; i < sizeof(prog); i++) {
        int opcode = prog[i];
        switch(opcode) {
        case 0x01: // 문자열 입력
            printf("입력 : ");
            scanf("%s", str);
            break;
        case 0x02: // 문자열 출력
            printf("출력 : %s\\n", str);
            break;
        case 0x03: // 스택 할당
            if (stack_ptr < 1000) {
                stack[stack_ptr++] = 1; // 스택 배열에 1 저장 할당
            } else {
                printf("Stack overflow\\n");
            }
            break;
        case 0x04: // 스택 pop
            if (stack_ptr > 0) {
                stack_ptr--;
            } else {
                printf("Stack underflow\\n");
            }
            break;
        case 0x05: // 스택 push
            if (stack_ptr < 1000) {
                stack[stack_ptr++] = 1; // 스택 배열에 1 저장 할당
            } else {
                printf("Stack overflow\\n");
            }
            break;
        case 0x06: // 더하기
            printf("A : ");
            scanf("%d", &a);
            printf("B : ");
            scanf("%d", &b);
            printf("결과 : %d\\n", a + b);
            break;
        case 0x07: // 빼기
            printf("A : ");
            scanf("%d", &a);
            printf("B : ");
            scanf("%d", &b);
            printf("결과 : %d\\n", a - b);
            break;
        case 0x08: // 프로그램 종료
            exit(0);
        default:
            printf("Invalid opcode: %x\\n", opcode);
        }
    }
    return 0;
}