diff --git a/assembler/src/main.rs b/assembler/src/main.rs index 000d328..78bf551 100644 --- a/assembler/src/main.rs +++ b/assembler/src/main.rs @@ -4,82 +4,14 @@ use assembler::{lexer, parser::Parser}; use common::prelude::{ITypeArgs, Instruction, RTypeArgs, Register}; fn main() { - // let program = fs::read_to_string("../resources/dsa/print.dsa").unwrap(); - // let tokens = lexer::lexer(program).unwrap(); + let program = fs::read_to_string("../resources/dsa/print.dsa").unwrap(); + let tokens = lexer::lexer(program).unwrap(); - // println!("{:?}", tokens); + println!("{:?}", tokens); - // let parser = Parser::new(tokens); + let parser = Parser::new(tokens); - // for node in parser { - // println!("{:?}", node); - // } - - // generate some instructions - let ins = vec![ - // Initialize first two Fibonacci numbers - // F(0) = 0, F(1) = 1 - - // Load 0 into Rg0 (F(0)) - Instruction::LoadLowerImmediate(ITypeArgs::new(0, None, Some(Register::Rg0))), - // Load 1 into Rg1 (F(1)) - Instruction::LoadLowerImmediate(ITypeArgs::new(1, None, Some(Register::Rg1))), - // Load loop counter (how many more numbers to calculate) - // Let's calculate 8 Fibonacci numbers total (0,1,1,2,3,5,8,13) - Instruction::LoadLowerImmediate(ITypeArgs::new(6, None, Some(Register::Rg2))), // 6 more iterations - // Load 0 for comparison - Instruction::LoadLowerImmediate(ITypeArgs::new(0, None, Some(Register::Zero))), - // Fibonacci calculation loop starts here (address 4) - // Calculate next Fibonacci number: F(n) = F(n-1) + F(n-2) - Instruction::Add(RTypeArgs::new( - Some(Register::Rg0), // F(n-2) - Some(Register::Rg1), // F(n-1) - Some(Register::Rg3), // F(n) result - None, - )), - // Shift the sequence: Rg0 = Rg1, Rg1 = Rg3 - Instruction::Mov(RTypeArgs::new( - Some(Register::Rg1), - Some(Register::NoReg), - Some(Register::Rg0), - None, - )), - Instruction::Mov(RTypeArgs::new( - Some(Register::Rg3), - Some(Register::NoReg), - Some(Register::Rg1), - None, - )), - // Decrement counter - Instruction::Decrement(RTypeArgs::new( - Some(Register::Rg2), - Some(Register::NoReg), - Some(Register::Rg2), - None, - )), - // Compare counter with 0 - Instruction::Compare(RTypeArgs::new( - Some(Register::Rg2), - Some(Register::Zero), - Some(Register::NoReg), - None, - )), - // Jump back to loop if counter > 0 (address 4) - // JGT jumps if greater than flag is set - Instruction::JumpGt(ITypeArgs::new(4, None, None)), - // Program complete - the final Fibonacci number is in Rg1 - // Let's move it to the accumulator for easy access - Instruction::Mov(RTypeArgs::new( - Some(Register::Rg1), - Some(Register::NoReg), - Some(Register::Acc), - None, - )), - // Halt the processor - Instruction::Halt, - ]; - - for i in ins.iter() { - println!("0x{:08x}", i.encode()); + for node in parser { + println!("{:?}", node); } }