Fixed memory displacement when subtracting labels, and added corresponding test

This commit is contained in:
Bobby Judd 2018-09-05 21:11:11 -07:00
parent 205845d6af
commit 8af652482d
2 changed files with 7 additions and 2 deletions

View File

@ -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;

View File

@ -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 {
}
}
}