Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

26 строки
1.2KB

  1. import sys, os
  2. sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
  3. from objfmt import *
  4. from pcopt import DEC, SIZE
  5. def dis(o, a=0, b=None):
  6. c = o.code; b = len(c) if b is None else b
  7. refs = {off: (pn(n), k) for n, k, off in o.refs}
  8. names = {off: pn(n) for n, k, off in o.defs}
  9. p = a
  10. while p < b:
  11. if p in names: print('%s:' % names[p])
  12. op = c[p]
  13. if op not in DEC: print('%04x %02x .byte' % (p, op)); p += 1; continue
  14. mn, md = DEC[op]; n = SIZE[md]; bs = c[p:p+n]
  15. v = bs[1] if n == 2 else (bs[1] | bs[2] << 8 if n == 3 else 0)
  16. if md == 'rel': v = p + 2 + (v - 256 if v > 127 else v)
  17. opnd = {'imp': '', 'acc': 'a', 'imm': '#$%02x' % v, 'zp': '$%02x' % v, 'zpx': '$%02x,x' % v, 'zpy': '$%02x,y' % v, 'abs': '$%04x' % v, 'abx': '$%04x,x' % v, 'aby': '$%04x,y' % v, 'izx': '($%02x,x)' % v, 'izy': '($%02x),y' % v, 'rel': 'L%04x' % v, 'ind': '($%04x)' % v}[md]
  18. tag = ''
  19. if p in refs: tag += ' ; ref %s' % (refs[p],)
  20. if p in o.reloc: tag += ' ; reloc'
  21. print('%04x %-9s %s %s%s' % (p, bs.hex(' '), mn, opnd, tag))
  22. p += n
  23. if __name__ == '__main__':
  24. o = Obj.parse(open(sys.argv[1], 'rb').read())
  25. dis(o)

Powered by TurnKey Linux.