From eaef30eb49148e3a2415a7b8dd1d0fc13c7175ca Mon Sep 17 00:00:00 2001 From: Hayden Kroepfl Date: Sat, 6 Jan 2018 18:53:35 -0700 Subject: [PATCH] Added Inc and Dec instructions based off Add code --- .../assembly/DefaultInstructionSet.java | 2 ++ .../assembly/instruction/DecInstruction.java | 32 +++++++++++++++++++ .../assembly/instruction/IncInstruction.java | 32 +++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 Server/src/main/java/net/simon987/server/assembly/instruction/DecInstruction.java create mode 100644 Server/src/main/java/net/simon987/server/assembly/instruction/IncInstruction.java diff --git a/Server/src/main/java/net/simon987/server/assembly/DefaultInstructionSet.java b/Server/src/main/java/net/simon987/server/assembly/DefaultInstructionSet.java index 43fffab..445db18 100755 --- a/Server/src/main/java/net/simon987/server/assembly/DefaultInstructionSet.java +++ b/Server/src/main/java/net/simon987/server/assembly/DefaultInstructionSet.java @@ -44,6 +44,8 @@ public class DefaultInstructionSet implements InstructionSet { add(new RclInstruction()); add(new RcrInstruction()); add(new SarInstruction()); + add(new IncInstruction()); + add(new DecInstruction()); } /** diff --git a/Server/src/main/java/net/simon987/server/assembly/instruction/DecInstruction.java b/Server/src/main/java/net/simon987/server/assembly/instruction/DecInstruction.java new file mode 100644 index 0000000..29a3ddb --- /dev/null +++ b/Server/src/main/java/net/simon987/server/assembly/instruction/DecInstruction.java @@ -0,0 +1,32 @@ +package net.simon987.server.assembly.instruction; + +import net.simon987.server.assembly.Instruction; +import net.simon987.server.assembly.Status; +import net.simon987.server.assembly.Target; +import net.simon987.server.assembly.Util; + +public class DecInstruction extends Instruction { + + public static final int OPCODE = 0x2B; + + public DecInstruction() { + super("dec", OPCODE); + } + + @Override + public Status execute(Target dst, int dstIndex, Status status) { + char a = (char) dst.get(dstIndex); + int result = a - 1; + + // Like x86 Carry flag is preserved during INC/DEC + // (Use ADD x, 1 to have carry flag change) + // Other flags set according to result + status.setSignFlag(Util.checkSign16(result)); + status.setZeroFlag((char) result == 0); + status.setOverflowFlag(Util.checkOverFlowSub16(a, 1)); + + dst.set(dstIndex, result); + return status; + } +} + diff --git a/Server/src/main/java/net/simon987/server/assembly/instruction/IncInstruction.java b/Server/src/main/java/net/simon987/server/assembly/instruction/IncInstruction.java new file mode 100644 index 0000000..05c5fa4 --- /dev/null +++ b/Server/src/main/java/net/simon987/server/assembly/instruction/IncInstruction.java @@ -0,0 +1,32 @@ +package net.simon987.server.assembly.instruction; + +import net.simon987.server.assembly.Instruction; +import net.simon987.server.assembly.Status; +import net.simon987.server.assembly.Target; +import net.simon987.server.assembly.Util; + +public class IncInstruction extends Instruction { + + public static final int OPCODE = 0x2A; + + public IncInstruction() { + super("inc", OPCODE); + } + + @Override + public Status execute(Target dst, int dstIndex, Status status) { + char a = (char) dst.get(dstIndex); + int result = a + 1; + + // Like x86 Carry flag is preserved during INC/DEC + // (Use ADD x, 1 to have carry flag change) + // Other flags set according to result + status.setSignFlag(Util.checkSign16(result)); + status.setZeroFlag((char) result == 0); + status.setOverflowFlag(Util.checkOverFlowAdd16(a, 1)); + + dst.set(dstIndex, result); + return status; + } +} +