summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2022-01-26 23:38:23 +0100
committerGustav Sörnäs <gustav@sornas.net>2022-01-26 23:38:23 +0100
commit7d19666cff378bf0d5d5c25dfff1b25069d39953 (patch)
treef091e2280b680aec1bbc98b4eb6e91c1d23c8673
parentf38be2d7220214a11039f845a8a89c8ee085cd3d (diff)
downloadtsea83-7d19666cff378bf0d5d5c25dfff1b25069d39953.tar.gz
jump address in adr-field
-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