diff options
| Commit | 4b5ed8fb063f08ce399371e48c59665e59ceea47 (patch) | |
|---|---|---|
| Author | 2025-02-15 00:19:03 +0200 | |
| Committer | 2025-02-15 00:19:03 +0200 | |
| Files | eddf26834aeb1549fbe468f2d0f95484c544073c /assembler/src/main.rs | |
| tonkobali-4b5ed8fb063f08ce399371e48c59665e59ceea47.tar tonkobali-4b5ed8fb063f08ce399371e48c59665e59ceea47.tar.gz tonkobali-4b5ed8fb063f08ce399371e48c59665e59ceea47.zip | ||
| Parent | e683120089bd669019a240c7eb5d615fa92df075 (diff) | |
feat(assembler): Add support for two pass collapse instructions and implement subroutine instructions
1 files changed, 12 insertions, 5 deletions
| -rw-r--r-- | assembler/src/main.rs | 17 |
diff --git a/assembler/src/main.rs b/assembler/src/main.rs index f2dde97..56a705d 100644 --- a/assembler/src/main.rs +++ b/assembler/src/main.rs @@ -18,7 +18,7 @@ struct Args { #[arg(default_value = "program.bin")] destination: String, - #[arg(short, long, default_value_t = 10)] + #[arg(short, long, default_value_t = 1024)] start_index: usize, #[arg(long, default_value_t = false)] @@ -44,7 +44,7 @@ fn main() { } /* Parse */ - let mut prog = Program::new(tokens); + let mut prog = Program::new(tokens, args.start_index); if args.debug { println!("\n### Parsed tokens ###\n"); @@ -65,19 +65,26 @@ fn main() { prog.collapse_instructions(); if args.debug { - println!("\n### After collapse_instructions ###\n"); + println!("\n### After first collapse_instructions ###\n"); + prog.print(0); + } + + prog.collapse_instructions(); + + if args.debug { + println!("\n### After second collapse_instructions ###\n"); prog.print(0); } /* Machine code gen */ - prog.instructions_to_constants(args.start_index); + prog.instructions_to_constants(); if args.debug { println!("\n### After instructions_to_constants ###\n"); prog.print(args.start_index); } - let binary = prog.to_bytes(args.start_index, PROGRAM_COUNTER); + let binary = prog.to_bytes(PROGRAM_COUNTER); let mut out = File::create(args.destination).unwrap(); out.write_all(&binary).unwrap(); |
