diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2023-04-10 17:30:25 +0300 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2023-04-10 17:30:25 +0300 |
| commit | 56fd37c60eb0d58ed4762340ddc85b74347bcd71 (patch) | |
| tree | d4d6362cb591ddb9658536d831f8c4433089189f /src/assembler_eval.py | |
| parent | 16b4fbd209d71bdb1a066bacd03a9ccd1cf3d16c (diff) | |
Do stuff
Diffstat (limited to 'src/assembler_eval.py')
| -rw-r--r-- | src/assembler_eval.py | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/assembler_eval.py b/src/assembler_eval.py index 7255572..07f22e7 100644 --- a/src/assembler_eval.py +++ b/src/assembler_eval.py @@ -5,8 +5,9 @@ constants: dict[str, str] = { "rb": "2", "rc": "3", "rd": "4", - "rf": "5", - "rg": "6", + "re": "5", + "rf": "6", + "rg": "7", # ALU instructions "al_plus": "0", "al_minus": "1", @@ -25,6 +26,10 @@ constants: dict[str, str] = { labels: dict[str, int] = {} +def check_size(bits: int, val: int) -> None: + if val >= 2 ** bits: + raise Exception(f"Value does not fit in {bits} bits: {val}") + def eval_symbol(c: str) -> str: if c in labels: return str(labels[c]) @@ -34,6 +39,8 @@ def eval_symbol(c: str) -> str: return c -def eval_expr(expr: str) -> int: +def eval_expr(expr: str, bits: int = 16) -> int: expr = eval_symbol(expr) - return eval(expr, labels.copy()) # eval as Python expr + ret = eval(expr, labels.copy()) # eval as Python expr + check_size(bits, ret) + return ret |
