mirror of
https://github.com/simon987/Much-Assembly-Required.git
synced 2025-04-19 02:36:41 +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_]", ""));
|
Character address = labels.get(expr.replaceAll("[^A-Za-z0-9_]", ""));
|
||||||
if (address != null) {
|
if (address != null) {
|
||||||
data = address;
|
data = (expr.startsWith("-")) ? -address : address;
|
||||||
value += registerSet.size() * 2;//refers to memory with disp
|
value += registerSet.size() * 2;//refers to memory with disp
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -116,6 +116,11 @@ public class OperandTest {
|
|||||||
assertEquals(8 + 2 * registerSet.size(), mem9.getValue());
|
assertEquals(8 + 2 * registerSet.size(), mem9.getValue());
|
||||||
assertEquals(1, mem9.getData());
|
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) {
|
} catch (InvalidOperandException e) {
|
||||||
fail("Failed trying to parse a valid operand");
|
fail("Failed trying to parse a valid operand");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user