Website Summary Files Commits Branches @commit @diff @stats
path: root / assembler / src / main.rs
diff options
context:
space:
mode:
Commit4b5ed8fb063f08ce399371e48c59665e59ceea47 (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-02-15 00:19:03 +0200
Committer
 Syndamia <kamen@syndamia.com>
2025-02-15 00:19:03 +0200
Fileseddf26834aeb1549fbe468f2d0f95484c544073c /assembler/src/main.rs
tonkobali-4b5ed8fb063f08ce399371e48c59665e59ceea47.tar
tonkobali-4b5ed8fb063f08ce399371e48c59665e59ceea47.tar.gz
tonkobali-4b5ed8fb063f08ce399371e48c59665e59ceea47.zip
Parente683120089bd669019a240c7eb5d615fa92df075 (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.rs17
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();