mirror of
https://github.com/simon987/Much-Assembly-Required.git
synced 2025-04-10 14:26:45 +00:00
Fixed memory displacement when subtracting labels, and added corresponding test
This commit is contained in:
parent
205845d6af
commit
8af652482d
@ -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;
|
||||
|
@ -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 {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user