#ifndef ASM_PARSER_H #define ASM_PARSER_H #include #include #define ROWS 100 #define COLS 255 int read_asm_file(char *filename, char program[ROWS][COLS]); int parse_instruction(char *instr, char *instr_bin_str); int parse_reg(char reg_num, char *instr_bin_str); int parse_add(char *instr, char *instr_bin_str); int parse_mul(char *instr, char *instr_bin_str); int parse_sub(char *instr, char *instr_bin_str); int parse_div(char *instr, char *instr_bin_str); int parse_and(char *instr, char *instr_bin_str); int parse_or(char *instr, char *instr_bin_str); int parse_xor(char *instr, char *instr_bin_str); int parse_imm5(char *imm_str, int *imm_value); /* Add additional helper functions to support other instructions */ int parse_nop(char *instr, char *instr_bin_str); int parse_not(char *instr, char *instr_bin_str); int parse_const(char *instr, char *instr_bin_str); int parse_imm9(char *imm_str, int *imm_value); int parse_sll(char *instr, char *instr_bin_str); int parse_sra(char *instr, char *instr_bin_str); int parse_srl(char *instr, char *instr_bin_str); int parse_uimm4(char *imm_str, int *imm_value); int parse_mod(char *instr, char *instr_bin_str); int parse_jmpr(char *instr, char *instr_bin_str); int parse_trap(char *instr, char *instr_bin_str); int parse_uimm8(char *imm_str, int *imm_value); int parse_rti(char *instr, char *instr_bin_str); unsigned short int str_to_bin(char *instr_bin_str); int write_obj_file(char *filename, unsigned short int program_bin[ROWS], int instr_count); void int_to_bin_str(int num, int bits, char *bin_str); void to_uppercase(char *str); void trim(char *str); void write_uint16_big_endian(FILE *file, uint16_t value); #endif