compilator-2000/asm_instructions.c
2021-04-06 16:33:49 +02:00

51 lines
No EOL
1.4 KiB
C

#include "asm_instructions.h"
char* instructions_labels[12] = {
"ADD",
"MUL",
"SOU",
"DIV",
"COP",
"AFC",
"JMP",
"JMF",
"INF",
"SUP",
"EQU",
"PRI"
};
void init_instruction_table(InstructionTable *table) {
table->index = 0;
}
int add_instruction(InstructionTable *table, Instruction instruction, int arg1, int arg2, int arg3) {
if (table->index >= INSTRUCTION_TABLE_SIZE) {
return -1;
}
InstructionItem newItem;
newItem.instruction = instruction;
newItem.arg1 = arg1;
newItem.arg2 = arg2;
newItem.arg3 = arg3;
table->table[table->index] = newItem;
table->index++;
return 0;
}
void write_instruction_table(InstructionTable *table, FILE *file) {
for (int i = 0; i < table->index; i++) {
write_instruction(&table->table[i], file);
}
}
void write_instruction(InstructionItem *item, FILE *file) {
if (item->instruction == PRI || item->instruction == JMP) {
fprintf(file, "%s %d\n", instructions_labels[item->instruction], item->arg1);
} else if (item->instruction == COP || item->instruction == AFC || item->instruction == JMF) {
fprintf(file, "%s %d %d\n", instructions_labels[item->instruction], item->arg1, item->arg2);
} else {
fprintf(file, "%s %d %d %d\n", instructions_labels[item->instruction], item->arg1, item->arg2, item->arg3);
}
}