#ifndef OPCODES_H #define OPCODES_H #include #include #include //#include "symbols_table.h" typedef enum { R1, R2, R3, R4, R5, R6, R7, R8 } Registers; typedef enum { ADD, SUB, JZ, INT, YLD, RET, CMP, NOP, JMP, CALL, LOAD, JE, INC, DEC, LOADB } Mnemonic; typedef enum { NoParameter, ConstantParameter, AddressParameter, RegisterParameter, UnresolvedParameter } OpcodeParameter; typedef struct { OpcodeParameter ParameterType; OpcodeParameter InterpretedAs; union { int Number; //ConstanrParam Registers Register; //Register param char* Symbol; //Symbol* Symbol; //Address param } Value; } Parameter; typedef struct { Mnemonic Mnemonic; Parameter* ParameterOne; Parameter* ParameterTwo; } Instruction; Instruction* CreateInstruction(Mnemonic mnemonic); Parameter* CreateParameter(OpcodeParameter parameterType); void FreeInstruction(Instruction* instruction); int IsOpcode(const char*, Mnemonic*); int IsRegister(const char*, Registers*); void GetMnemonicText(Mnemonic mnemonic, char buffer[12]); void GetRegisterText(Registers reg, char buffer[3]); unsigned char GetInstructionMask(Mnemonic type); #endif