changeset 21:5953026ed47e

immediate ints are now only signed when they are negative
author james <jb302@eecs.qmul.ac.uk>
date Sun, 23 Feb 2014 19:17:25 +0000
parents ddeae9d3fff4
children c988e43bf2b5
files assembler/language.py assembler/language.pyc
diffstat 2 files changed, 8 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/assembler/language.py	Sun Feb 23 14:52:31 2014 +0000
+++ b/assembler/language.py	Sun Feb 23 19:17:25 2014 +0000
@@ -318,29 +318,33 @@
             is_neg = 1
         
         # things that can be negative
-        # immediate ints
+        # immediate ints (signed when negative)
         if (a[:3] == '#' + PREFIX):
             # 8 bit ints
             if len(a[3:]) <= 2:
                 sym.append('#data8')
                 if is_neg:
                     val = string_num('-' + a[1:])
+                    fmt = '>b'
                 else:
                     val = string_num(a[1:])
+                    fmt = '>B'
                 # signed big-endian byte
-                data = data + struct.pack('>b', val)
+                data = data + struct.pack(fmt, val)
                 continue
             # 16 bit ints
             elif len(a[3:]) <= 4:
                 sym.append('#data16')
                 if is_neg:
                     val = string_num('-' + a[1:])
+                    fmt = '>h'
                 else:
                     val = string_num(a[1:])
+                    fmt = '>H'
                 # signed big-endian short
-                data = data + struct.pack('>h', val)
+                data = data + struct.pack(fmt, val)
                 continue
-        # 8 bit relative addresses
+        # 8 bit relative addresses (always signed)
         elif (a[:2] == PREFIX) and (len(a[2:]) <= 2):
             sym.append('rel8')
             if is_neg:
Binary file assembler/language.pyc has changed