From 2585629c250a0b345e6d915c8b1d460cc2488dd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Szostak?= Date: Thu, 2 May 2024 15:36:37 +0200 Subject: [PATCH] Implemented Subtraction, Multiplication and Division --- src/sillymachine.adb | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/src/sillymachine.adb b/src/sillymachine.adb index dc28f58..c29d362 100644 --- a/src/sillymachine.adb +++ b/src/sillymachine.adb @@ -127,18 +127,54 @@ begin when 9 => MovF(RegisterF(Integer(Instruction (2))), -- Move Register to Register (Float) RegisterF(Integer(Instruction (3)))); when 10 => null; -- TODO: Move Memory to Register (Float) - when 11 => AddU(RegisterU(Integer(Instruction (2))), -- Add Unsigned_32 to Register + when 11 => AddU(RegisterU(Integer(Instruction (2))), -- Add Register to Unsigned_32 BytesToU(TempBytes(Instruction))); when 12 => AddU(RegisterU(Integer(Instruction (2))), -- Add Register to Register (Unsigned_32) RegisterU(Integer(Instruction (3)))); - when 13 => AddI(RegisterI(Integer(Instruction (2))), -- Add Int to Register + when 13 => AddI(RegisterI(Integer(Instruction (2))), -- Add Register to Integer BytesToI(TempBytes(Instruction))); when 14 => AddI(RegisterI(Integer(Instruction (2))), -- Add Register to Register (Int) RegisterI(Integer(Instruction (3)))); - when 15 => AddF(RegisterF(Integer(Instruction (2))), -- Add Float to Register + when 15 => AddF(RegisterF(Integer(Instruction (2))), -- Add Register to Float BytesToF(TempBytes(Instruction))); when 16 => AddF(RegisterF(Integer(Instruction (2))), -- Add Register to Register (Float) RegisterF(Integer(Instruction (3)))); + when 17 => SubU(RegisterU(Integer(Instruction(2))), -- Subtract Unsigned_32 from Register + BytesToU(TempBytes(Instruction))); + when 18 => SubU(RegisterU(Integer(Instruction(2))), -- Subtract Register from Register (Unsigned_32) + RegisterU(Integer(Instruction (3)))); + when 19 => SubI(RegisterI(Integer(Instruction(2))), -- Subtract Integer from Register + BytesToI(TempBytes(Instruction))); + when 20 => SubI(RegisterI(Integer(Instruction(2))), -- Subtract Register from Register (Int) + RegisterI(Integer(Instruction (3)))); + when 21 => SubF(RegisterF(Integer(Instruction(2))), -- Subtract Float from Register + BytesToF(TempBytes(Instruction))); + when 22 => SubF(RegisterF(Integer(Instruction(2))), -- Subtract Register from Register (Float) + RegisterF(Integer(Instruction (3)))); + when 23 => MulU(RegisterU(Integer(Instruction(2))), -- Multiply Register by Unsigned_32 + BytesToU(TempBytes(Instruction))); + when 24 => MulU(RegisterU(Integer(Instruction(2))), -- Multiply Register by Register (Unsigned_32) + RegisterU(Integer(Instruction (3)))); + when 25 => MulI(RegisterI(Integer(Instruction(2))), -- Multiply Register by Integer + BytesToI(TempBytes(Instruction))); + when 26 => MulI(RegisterI(Integer(Instruction(2))), -- Multiply Register by Register (Int) + RegisterI(Integer(Instruction (3)))); + when 27 => MulF(RegisterF(Integer(Instruction(2))), -- Multiply Register by Float + BytesToF(TempBytes(Instruction))); + when 28 => MulF(RegisterF(Integer(Instruction(2))), -- Multiply Register by Register (Float) + RegisterF(Integer(Instruction (3)))); + when 29 => DivU(RegisterU(Integer(Instruction(2))), -- Divide Register by Unsigned_32 + BytesToU(TempBytes(Instruction))); + when 30 => DivU(RegisterU(Integer(Instruction(2))), -- Divide Register from Register (Unsigned_32) + RegisterU(Integer(Instruction (3)))); + when 31 => DivI(RegisterI(Integer(Instruction(2))), -- Divide Register by Integer + BytesToI(TempBytes(Instruction))); + when 32 => DivI(RegisterI(Integer(Instruction(2))), -- Divide Register by Register (Int) + RegisterI(Integer(Instruction (3)))); + when 33 => DivF(RegisterF(Integer(Instruction(2))), -- Divide Register by Float + BytesToF(TempBytes(Instruction))); + when 34 => DivF(RegisterF(Integer(Instruction(2))), -- Divide Register by Register (Float) + RegisterF(Integer(Instruction (3)))); when 65535 => goto THE_END; -- exit opcode when others => null; end case;