Mercurial > hg > ede
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: