From 40c104f2feb59849d93c8b0e6bfc2b99cca9e37c Mon Sep 17 00:00:00 2001 From: Imbus <> Date: Sat, 11 May 2024 19:43:33 +0200 Subject: [PATCH] Suited instructions now use Operand as operand --- .../main/java/hatelace/instructions/Add.java | 15 +++++++-------- .../main/java/hatelace/instructions/Copy.java | 12 ++++++------ .../java/hatelace/instructions/JumpEq.java | 18 ++++++++++-------- .../main/java/hatelace/instructions/Mul.java | 16 ++++++++-------- 4 files changed, 31 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/hatelace/instructions/Add.java b/app/src/main/java/hatelace/instructions/Add.java index fc5c2ab..1b88504 100644 --- a/app/src/main/java/hatelace/instructions/Add.java +++ b/app/src/main/java/hatelace/instructions/Add.java @@ -3,19 +3,18 @@ package hatelace.instructions; import hatelace.*; public class Add extends Instruction { - private Address src; - private Word imm; private Address dest; + private Operand o1, o2; /** Add immediate value to memory address. */ - public Add(Address src, Word imm, Address dest) { - this.src = src; - this.imm = imm; + public Add(Operand o1, Operand o2, Address dest) { + this.o1 = o1; + this.o2 = o2; this.dest = dest; } public void execute(Memory memory, ProgramCounter PC) { - memory.write(this.dest, memory.read(this.src).add(this.imm)); + memory.write(this.dest, this.o1.getWord(memory).add(this.o2.getWord(memory))); PC.incPC(); } @@ -24,10 +23,10 @@ public class Add extends Instruction { } public String toString() { - return String.format("%s [%s] %s [%s]", this.opcode(), this.src, this.imm, this.dest); + return String.format("%s [%s] %s [%s]", this.opcode(), this.o1, this.o2, this.dest); } protected Object[] operands() { - return new Object[] { this.src, this.imm, this.dest }; + return new Object[] { this.o1, this.o2, this.dest }; } } diff --git a/app/src/main/java/hatelace/instructions/Copy.java b/app/src/main/java/hatelace/instructions/Copy.java index 985ce1a..a88c27e 100644 --- a/app/src/main/java/hatelace/instructions/Copy.java +++ b/app/src/main/java/hatelace/instructions/Copy.java @@ -3,17 +3,17 @@ package hatelace.instructions; import hatelace.*; public class Copy extends Instruction { - private Word imm; + private Operand src; private Address dest; /** Copy immediate value to memory address. */ - public Copy(Word imm, Address dest) { - this.imm = imm; + public Copy(Operand src, Address dest) { + this.src = src; this.dest = dest; } public void execute(Memory memory, ProgramCounter PC) { - memory.write(this.dest, this.imm); + memory.write(this.dest, this.src.getWord(memory)); PC.incPC(); } @@ -22,10 +22,10 @@ public class Copy extends Instruction { } protected Object[] operands() { - return new Object[] {this.imm, this.dest}; + return new Object[] {this.src, this.dest}; } public String toString() { - return String.format("%s %s [%s]", this.opcode(), this.imm, this.dest); + return String.format("%s %s [%s]", this.opcode(), this.src, this.dest); } } diff --git a/app/src/main/java/hatelace/instructions/JumpEq.java b/app/src/main/java/hatelace/instructions/JumpEq.java index f2538be..66712e5 100644 --- a/app/src/main/java/hatelace/instructions/JumpEq.java +++ b/app/src/main/java/hatelace/instructions/JumpEq.java @@ -4,18 +4,20 @@ import hatelace.*; public class JumpEq extends Instruction { private int index; - private Address src; - private Word imm; + // private Address src; + // private Word imm; + private Operand o1; + private Operand o2; /** Conditional jump */ - public JumpEq(int index, Address src, Word imm) { + public JumpEq(int index, Operand o1, Operand o2) { this.index = index; - this.src = src; - this.imm = imm; + this.o1 = o1; + this.o2 = o2; } public void execute(Memory memory, ProgramCounter PC) { - if (this.imm.equals(memory.read(this.src))) { + if (this.o1.getWord(memory).equals(this.o2.getWord(memory))) { PC.setPC(this.index); } else { PC.incPC(); @@ -27,10 +29,10 @@ public class JumpEq extends Instruction { } protected Object[] operands() { - return new Object[] {this.index, this.src, this.imm}; + return new Object[] {this.index, this.o1, this.o2}; } public String toString() { - return String.format("%s %s [%s] %s", this.opcode(), this.index, this.src, this.imm); + return String.format("%s %s [%s] %s", this.opcode(), this.index, this.o1, this.o2); } } diff --git a/app/src/main/java/hatelace/instructions/Mul.java b/app/src/main/java/hatelace/instructions/Mul.java index cd61d81..4536682 100644 --- a/app/src/main/java/hatelace/instructions/Mul.java +++ b/app/src/main/java/hatelace/instructions/Mul.java @@ -3,19 +3,19 @@ package hatelace.instructions; import hatelace.*; public class Mul extends Instruction { - private Address src1; - private Address src2; + private Operand o1; + private Operand o2; private Address dest; /** Multiply contents of two addresses and store the result in a third memory address. */ - public Mul(Address src1, Address src2, Address dest) { - this.src1 = src1; - this.src2 = src2; + public Mul(Operand o1, Operand o2, Address dest) { + this.o1 = o1; + this.o2 = o2; this.dest = dest; } public void execute(Memory memory, ProgramCounter PC) { - memory.write(this.dest, memory.read(this.src1).multiply(memory.read(this.src2))); + memory.write(this.dest, this.o1.getWord(memory).multiply(this.o2.getWord(memory))); PC.incPC(); } @@ -24,10 +24,10 @@ public class Mul extends Instruction { } protected Object[] operands() { - return new Object[] { this.src1, this.src2, this.dest }; + return new Object[] { this.o1, this.o2, this.dest }; } public String toString() { - return String.format("%s [%s] [%s] [%s]", this.opcode(), this.src1, this.src2, this.dest); + return String.format("%s [%s] [%s] [%s]", this.opcode(), this.o1, this.o2, this.dest); } }