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;