#ifndef INSTRUCTIONS_H #define INSTRUCTIONS_H #include "../vmbl.h" #define MAX_ARGS 3 typedef enum { ARG_TYPE_NONE, ARG_TYPE_INT } ArgType; typedef struct { char *mnemonic; uint8_t argCount; ArgType args[MAX_ARGS]; } InstructionInfo; static const InstructionInfo instruction_table[] = { [INSTRUCTION_NOP] = { "nop", 0, { ARG_TYPE_NONE } }, [INSTRUCTION_PUSH] = { "push", 1, { ARG_TYPE_INT } }, [INSTRUCTION_DROP] = { "drop", 1, { ARG_TYPE_INT } }, [INSTRUCTION_ADD] = { "add", 0, { ARG_TYPE_NONE } }, [INSTRUCTION_SUB] = { "sub", 0, { ARG_TYPE_NONE } }, [INSTRUCTION_MUL] = { "mul", 0, { ARG_TYPE_NONE } }, [INSTRUCTION_DIV] = { "div", 0, { ARG_TYPE_NONE } }, [INSTRUCTION_DUPLICATE] = { "dup", 1, { ARG_TYPE_INT } }, [INSTRUCTION_HALT] = { "halt", 0, { ARG_TYPE_NONE } }, }; InstructionType instructionNameToType(char* instName); #endif // !INSTRUCTIONS_H