From 7d19666cff378bf0d5d5c25dfff1b25069d39953 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Wed, 26 Jan 2022 23:38:23 +0100 Subject: jump address in adr-field --- lab1asm.py | 11 ++++------- test_bra.out | 20 ++++++++++---------- 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 -- cgit v1.2.1