From 000f140e8be5431f16288ed86d70380322d16438 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Szostak?= <BartGOKU@onet.pl> Date: Sun, 21 Apr 2024 16:23:29 +0200 Subject: [PATCH] Implemented add instruction (only positive integers for now) --- src/shardware.adb | 6 ++++++ src/shardware.ads | 1 + src/sillymachine.adb | 10 ++++++++++ 3 files changed, 17 insertions(+) diff --git a/src/shardware.adb b/src/shardware.adb index c34e089..3743a25 100644 --- a/src/shardware.adb +++ b/src/shardware.adb @@ -17,4 +17,10 @@ package body Shardware is Register := Value; end Mov; + procedure Add (Register : in out Integer; Value : Integer) is + begin + Register := Register + Value; + end Add; + + end Shardware; diff --git a/src/shardware.ads b/src/shardware.ads index 13ad843..863b15b 100644 --- a/src/shardware.ads +++ b/src/shardware.ads @@ -11,5 +11,6 @@ package Shardware is function My_Shift (Value : Byte; Amount : Integer) return Integer; procedure Mov (Register : in out Integer; Value : Integer); + procedure Add (Register : in out Integer; Value : Integer); end Shardware; diff --git a/src/sillymachine.adb b/src/sillymachine.adb index 53df613..40d9596 100644 --- a/src/sillymachine.adb +++ b/src/sillymachine.adb @@ -115,11 +115,21 @@ begin ); when 1 => Mov(Register(Integer(Instruction (2))), -- Move Register to Register Register(Integer(Instruction (3)))); + when 3 => null; -- Move Memory to Register + when 4 => Add(Register(Integer(Instruction (2))), -- Add Int to Register (Only positive values for now) + Integer(My_Shift(Instruction (7), 24) + + My_Shift(Instruction (8), 16) + + My_Shift(Instruction (9), 8) + + Integer(Instruction (10))) + ); + when 5 => Add(Register(Integer(Instruction (2))), -- Add Register to Register + Register(Integer(Instruction (3)))); when 65535 => goto THE_END; -- exit opcode when others => null; end case; Put_Line(Integer'Image(Register(0))); + Put_Line(Integer'Image(Register(1))); PC := PC + 16; -- increment program counter to next instruction end loop;