Added a start address (equivalent to main) to assembler

Creates a jump address to the label delegated by "global" so program
starts at that point.
This commit is contained in:
2023-11-03 19:01:31 +00:00
parent 32d50a9342
commit b5a1582976
4 changed files with 104 additions and 38 deletions

View File

@@ -25,9 +25,10 @@ typedef enum
PERR_EXPECTED_UTYPE,
PERR_EXPECTED_TYPE,
PERR_EXPECTED_SYMBOL,
PERR_EXPECTED_LABEL,
PERR_EXPECTED_OPERAND,
PERR_UNKNOWN_OPERATOR,
PERR_INVALID_RELATIVE_ADDRESS,
PERR_UNKNOWN_OPERATOR,
PERR_UNKNOWN_LABEL,
} perr_t;
@@ -37,16 +38,26 @@ typedef struct
{
inst_t instruction;
char *label;
s_word relative_address;
s_word address;
enum PResult_Type
{
PRES_LABEL = 0,
PRES_LABEL_ADDRESS,
PRES_GLOBAL_LABEL,
PRES_RELATIVE_ADDRESS,
PRES_COMPLETE_RESULT,
} type;
} presult_t;
typedef struct
{
char *name;
size_t name_size;
word addr;
} label_t;
label_t search_labels(label_t *, size_t, char *);
perr_t parse_next(token_stream_t *, presult_t *);
perr_t process_presults(presult_t *, size_t, inst_t **, size_t *);
perr_t parse_stream(token_stream_t *, inst_t **, size_t *);