From 8af652482dcd03112bedbdf09715f51e2ad90e86 Mon Sep 17 00:00:00 2001 From: Bobby Judd Date: Wed, 5 Sep 2018 21:11:11 -0700 Subject: [PATCH] Fixed memory displacement when subtracting labels, and added corresponding test --- .../main/java/net/simon987/server/assembly/Operand.java | 2 +- .../java/net/simon987/server/assembly/OperandTest.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Server/src/main/java/net/simon987/server/assembly/Operand.java b/Server/src/main/java/net/simon987/server/assembly/Operand.java index 9da8ce9..b236365 100755 --- a/Server/src/main/java/net/simon987/server/assembly/Operand.java +++ b/Server/src/main/java/net/simon987/server/assembly/Operand.java @@ -216,7 +216,7 @@ public class Operand { Character address = labels.get(expr.replaceAll("[^A-Za-z0-9_]", "")); if (address != null) { - data = address; + data = (expr.startsWith("-")) ? -address : address; value += registerSet.size() * 2;//refers to memory with disp return true; diff --git a/Server/src/test/java/net/simon987/server/assembly/OperandTest.java b/Server/src/test/java/net/simon987/server/assembly/OperandTest.java index ec62389..ddea141 100644 --- a/Server/src/test/java/net/simon987/server/assembly/OperandTest.java +++ b/Server/src/test/java/net/simon987/server/assembly/OperandTest.java @@ -116,6 +116,11 @@ public class OperandTest { assertEquals(8 + 2 * registerSet.size(), mem9.getValue()); assertEquals(1, mem9.getData()); + Operand mem10 = new Operand("[ B - label1 ]", labels, registerSet, 0); + assertEquals(OperandType.MEMORY_REG_DISP16, mem10.getType()); + assertEquals(2 + 2 * registerSet.size(), mem10.getValue()); + assertEquals(-10, mem10.getData()); + } catch (InvalidOperandException e) { fail("Failed trying to parse a valid operand"); @@ -148,4 +153,4 @@ public class OperandTest { } -} \ No newline at end of file +}