summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lab1asm.py11
-rw-r--r--test_bra.out20
2 files changed, 14 insertions, 17 deletions
diff --git a/lab1asm.py b/lab1asm.py
index dfe9fb3..f6c7997 100644
--- a/lab1asm.py
+++ b/lab1asm.py
@@ -42,14 +42,10 @@ def compile(lines):
))
case [inst, label]:
assert inst in ("bra", "bne", "bge", "beq")
- compiled.append("{:02x}: {:01x}000".format(
+ compiled.append("{:02x}: {:01x}0<{}>".format(
addr,
OPS[inst],
- ))
- addr += 1
- compiled.append("{:02x}: <{}>".format(
- addr,
- label
+ label,
))
case ["halt"]:
compiled.append("{:02x}: {:01x}000".format(addr, OPS["halt"]))
@@ -63,7 +59,8 @@ def compile(lines):
linked = []
for line_nr, line in enumerate(compiled):
for label, label_nr in labels.items():
- line = line.replace(f"<{label}>", f"{label_nr - line_nr:04x}")
+ rel_pos = (label_nr - line_nr + 0xff) & 0xff
+ line = line.replace(f"<{label}>", f"{rel_pos:02x}")
linked.append(line)
return linked, labels
diff --git a/test_bra.out b/test_bra.out
index 22b9374..58ef61b 100644
--- a/test_bra.out
+++ b/test_bra.out
@@ -1,14 +1,14 @@
PM:
-00: 6000
-01: 0005
-02: 0100
-03: 00ee
-04: 101a
-05: 8000
-06: 0100
-07: 00ff
-08: 101a
-09: 8000
+00: 6004
+01: 0100
+02: 00ee
+03: 101a
+04: 8000
+05: 0100
+06: 00ff
+07: 101a
+08: 8000
+09: 0000
0a: 0000
0b: 0000
0c: 0000