Forum: Mikrocontroller und Digitale Elektronik 6811 Assemblerfrage


von René (Gast)


Lesenswert?

Hallo,
ich hoffe einer von euch kann sich noch an seine Motorola 6811 Zeit 
erinnern.

Momentan beschäftige ich mich mit IDA Aufgrund von Anpassungen eines 
alten System. Dafür muss züsatzlich zur Logik mich auch mit der Mnemonic 
des Kontrollers vertraut machen.

IDA hat folgende Konstrukte:
1
loc_12B  SBA
2
3
;weiter unten: 
4
         ORAB loc_12B

Habe es einmal in ThrSim11 simuliert. Was ich nicht verstehe, das 
Register B wird mit 10h also dem Opcode geladen und nicht wie ich es 
erwartet hätte: Register B von A Subtrahiert und danach der Inhalt B 
verodert.

Ist das Verhalten vom Simulator so richtig? loc_12B ist doch eine 
Sprungmarke, oder?

Einfacher wäre dann doch:
1
        LDAB #$10
2
        ORAB loc_12B

Vielen Dank!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du kannst Dich nicht darauf verlassen, daß die Ausgabe Deines 
Disassemblers logisch korrekt ist. Wenn beispielsweise mitten im Code 
eine Datentabelle auftaucht (was bei handgeschriebenem Assemblercode 
nicht auszuschließen ist), dann versucht der Disassembler zunächst, 
diese zu disassemblieren und liefert folglich merkwürdig aussehenden 
Code. Bei Texten o.ä. oder bei oft referenzierten Stellen hat der 
Disassembler eine Chance, herauszufinden, daß das kein Code ist -- aber 
das ist eben nicht absolut zuverlässig.

Von daher kann das, was Du Dir da ansiehst, vollkommener Quark sein. 
Die Ausgabe des Simulators ist hier wahrscheinlich realistischer, wenn 
der mit dem Reset-Vektor "gezündet" wird und das Programm wirklich von 
Anfang an abarbeitet.

von Mark L. (Firma: TH Köln) (m2k10) Benutzerseite


Lesenswert?

René schrieb:
> loc_12B ist doch eine
> Sprungmarke, oder?

Nein, ist es bei Verwendung mit ORAB nicht, sondern (auch) eine 
Speicheradresse für direkte Adressierung. Wenn der Code aus einem 
Disassembler stammt, vergiss besser das SBA, der kann nicht wissen, wo 
Werte und wo Befehle stehen. Es war/ist nicht unüblich bei diesen 
Prozessoren Code und Daten 'etwas' durcheinander zu legen, wenn man da 
nicht den Originalcode vorliegen hat wird's lustig.
Das ORAB verodert einfach ACCB mit dem Wert an der Adresse loc_12B, dein 
Codevorschlag ergibt da keinen Sinn ($10 oder $10 = $10).

Mark

von René (Gast)


Lesenswert?

Hallo Mark,
ok, dankeschön! Da liege ich mit meiner Vermutung wohl richtig, dass IDA 
es nicht richtig disassembliert hat und ich im DATEN-Teil bin.

Da werde ich wohl nochmals nachlesen müssen ob es noch irgendwelche 
Optionen zu setzen gibt.

Grüße René

von René (Gast)


Lesenswert?

Danke auch an Rufus Τ. Firefly!

Ich spiele gerade noch mit dem DHC11 rum. Dieser hat  den RESET @FFFE 
korrekt identifiziert und mir den Einstieg richtig gesetzt. Immerhin 
wird er Stackpointer beim EntryPoint auf 01FF gesetzt, was am Ende des 
RAM´s liegt. Hat auch teilweise "DATA-Arrays" gebildet.

Da heißt es weiterstöbern! ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.