starting work on tokenizer for assembly language
This commit is contained in:
21
src/vmbl.c
21
src/vmbl.c
@@ -11,7 +11,6 @@
|
||||
} \
|
||||
(vmblState)->stack[(vmblState)->stackSize - 2] = (vmblState)->stack[(vmblState)->stackSize - 2] operation (vmblState)->stack[(vmblState)->stackSize - 1]; \
|
||||
(vmblState)->stackSize--; \
|
||||
(vmblState)->ip++; \
|
||||
} while (0);
|
||||
|
||||
|
||||
@@ -37,7 +36,7 @@ VMBL_Exception VBML_ExecuteInstruction(VMBL_State *vmblState, VMBL_Instruction i
|
||||
MATH_OP(vmblState, *);
|
||||
break;
|
||||
case INSTRUCTION_DIV:
|
||||
if (instruction.opperands[0] == 0) {
|
||||
if (vmblState->stack[vmblState->stackSize-1] == 0) {
|
||||
return (VMBL_Exception){ EXCEPTION_DIVIDE_BY_ZERO };
|
||||
}
|
||||
|
||||
@@ -152,7 +151,7 @@ void VMBL_LoadExecutable(VMBL_State *vmblState, VMBL_Instruction *program, size_
|
||||
exit(1);
|
||||
}
|
||||
|
||||
memcpy(&vmblState->program, program, sizeof(program) * programSize);
|
||||
memcpy(&vmblState->program, program, programSize);
|
||||
|
||||
vmblState->programSize = programSize;
|
||||
}
|
||||
@@ -192,6 +191,7 @@ void VMBL_SaveExecutable(const char* filePath, VMBL_Instruction *program, size_t
|
||||
}
|
||||
|
||||
char *instructionTypeToCStr(InstructionType type) {
|
||||
printf("%x\n", type);
|
||||
switch (type)
|
||||
{
|
||||
|
||||
@@ -227,6 +227,21 @@ char *instructionTypeToCStr(InstructionType type) {
|
||||
case INSTRUCTION_EQUAL:
|
||||
return "EQ ";
|
||||
break;
|
||||
case INSTRUCTION_NOT_EQUAL:
|
||||
return "NEQ ";
|
||||
break;
|
||||
case INSTRUCTION_GREATER_THAN:
|
||||
return "GT ";
|
||||
break;
|
||||
case INSTRUCTION_GREATER_THAN_EQUAL:
|
||||
return "GTE ";
|
||||
break;
|
||||
case INSTRUCTION_LESS_THAN:
|
||||
return "LT ";
|
||||
break;
|
||||
case INSTRUCTION_LESS_THAN_EQUAL:
|
||||
return "LTE ";
|
||||
break;
|
||||
|
||||
case INSTRUCTION_JUMP_CONDITIONAL:
|
||||
return "JC ";
|
||||
|
||||
Reference in New Issue
Block a user