44 lines
1.7 KiB
C
44 lines
1.7 KiB
C
#ifndef ASM_PARSER_H
|
|
#define ASM_PARSER_H
|
|
|
|
#include <ctype.h>
|
|
#include <stdint.h>
|
|
|
|
#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
|