starting work on tokenizer for assembly language

This commit is contained in:
SpookyDervish
2025-12-21 05:47:15 +11:00
parent 03ea7bd418
commit b1ff26bcbb
6 changed files with 123 additions and 10 deletions

View File

@@ -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 ";