Ich spiele ein wenig mit dem disassemblieren von Code herum.
Dabei stolpere ich über ein Problem, bei dem ich nicht weiss, wie ich es lösen kann.
Beispiel (den Sinn des Code bitte ignorieren.)
Der Maschinencode dafür
Beim disassemblieren gehe ich so vor, dass ich eine mnemonic Tabelle habe, in der ich nachschaue, aus wie vielen bytes eine Anweisung besteht,
So wird also "AD 17 08" also LDA $0817
Für einfache Listings, in denen sich Code und Daten nicht mischen, funktioniert das schon sehr gut. Nicht aber im obigen Fall, wo Daten mitten im Code stehen.
Das !byte $10 wird hier nämlich durch das mnemonic BPL ersetzt, welches ein weiteres Byte erwartet für die relative Adressierung
Dadurch stimmt dann der folgende Code nicht mehr.
Der obige Bytecode wird daher zu diesem Code disassembliert:
Ich vermute daher, dass ich mit dem aktuellen Ansatz, Code zu erkennen, in einer Sackgasse stecke.
Ich wüsste aber auch nicht, wie man mit Sicherheit Code von Daten unterscheiden könnte. Wäre der obige Datenbereich statt $10 (für BPL) zum Beispiel $EA (NOP) gewesen, dann würde es zwar codeseitig keinen Sinn ergeben, aber durchaus wieder korrekt kompilieren.
Ich rufe an dieser Stelle direkt mal Assembler-Gott Mac Bacon herbei
Freue mich über Hinweise, Tipps und Denkanstösse