Assembler Code in C umwandeln?

Hallo Leute,
leider finde ich bei Google nichts hilfreiches dazu daher habe ich gedacht ich wende mich mal an die Spezialisten hier :smile:

Stehe vor folgender Aufgabenstellung:

Schreiben sie folgendes in C, MOVE #$ab,$1000

Schreiben sie folgendes in C, MOVE #$2700, SR

Kann mir da bitte einer weiterhelfen? Danke schon mal :slight_smile:

Drei Sachen fallen mir dazu ein:

  1. w-w-w ist nicht dazu da, Hausaufgaben machen zu lassen. Bitte wähle wenn das Vorgehen, Dein Verständnis und Deinen (ggf. auch vergeblichen) Lösungsansatz zu schildern.

  2. Das Thema gehört nicht nach „Informatik“ sondern nach „C/C++“ (kümmere ich mich gleich drum)

  3. Die „Aufgaben“ sehen unvollständig, durcheinander oder unsinnig aus. Wobei die erste Schwierigkeit schon darin besteht, dass die Assemblerbefehle von Prozessor zu Prozessor etwas unterschiedlich sind und sich die Schreibweisen entsprechend unterscheiden. Hier schaut es aber ganz merkwürdig aus, weil es nach üblicher Schreibweise bedeutet, dass das Ziel einer Zuweisung eine Konstante sein soll.
    Überhaupt ist der Ansatz einen einzelnen Assemblerbefehl in C zu übersetzen, als würde man einen Text vom Deutschen übersetzen wollen und dazu fragt, wie man den Buchstaben „T“ ins Englische übersetzt.
    Passiert allerdings in der IT häufiger, dass Leute Schulungen geben, die das Gelehrte noch nie selbst außerhalb von Lehrübungen praktiziert haben.

Ciao, Allesquatsch

Tut mir leid…
Den Prozessor habe ich vergessen: MC68000 (Motorola)

Ich dachte w-w-w hilft bei Fragen.
Tut mir leid das die Frage für dich wie eine Hausaufgabe aussehen :smiley:

Also MOVE #$ab,$1000 bedeutet ja , dass an die Stelle 1000 der Wert ab geschriebe werden soll. Du brauchst also einen pointer der auf die Stelle 1000 (4096) zeigt, und schreibst dort dann ab (171) rein.

int *a;
a = 4096; //hex 1000
*a=171; //dex ab

Bei der zweiten Aufgabe kann ich Dir nicht weiter helfen, da ich nicht weis was SR sein soll, aber vielleicht kommst Du jetzt ja selber weiter, nachdem Du Die die Lösung für den ersten Teil mal angeschaut hast.

Diese Antwort ist nur dann richtig, wenn der Assembler die Größen hier falsch anpassen würde.
Die Standard MOVE Anweisung (ohne Größenangabe) hat als Standardgröße ein Byte. Deswegen muss hier in der Lösung ein „char“ oder „unsigned char“ anstatt eines "int"s benutzt werden, also sowas wie

unsigned char *p = (unsigned char*) 0x1000;
*p = 0xab;

SR ist dass 16 bit Status Register, welches je nach Version des Prozessors ganz, teilweise oder gar nicht beschrieben werden kann, idR aber nicht mit den standardisierten C/C++ Befehlen.

Gruß
HH

1 Like

Hi,

aber das hat sich doch geändert seit dem glorreichen Umbau. Gibt es nicht irgendwo sogar ein dediziertes Hausaufgabenbrett?

Ja, mal abgesehen von dem netten Streit, den es damals unter den Informatikern gab, ob das Ziel nun an erste oder zweite Stelle kommt :wink:

stimmt, ich kenne Professoren der theoretischen Informatik, die nicht wirklich programmieren können … Die würden - sofern sie denn zwangsverdonnert werden, eine Info-B Vorlesung zu halten (in der vielleicht Assembler oder C vorkommt) - aber einen „dummen“ Assi vorschicken …

Gruß
HH

Hallo HAL9000,

danke für Deine fachkundigen Antworten

Falls man irgendwas noch zu Geld machen kann, ist die Hemmschwelle inzwischen flexibel :wink:
Hindert mich aber nicht daran, selbständige Entscheidungen zu treffen.

Schlichtere Gemüter glauben daran, dass man mehr Traffic und größeres Interesse produziert, wenn die Eingangskriterien für neue Fragen möglich niedrig sind.

Meiner Erfahrung nach sind solche HA-Threads aber davon geprägt, dass ohnehin selten was nachkommt. Es ist extrem selten, dass Threaderöffner noch mal Rückfragen nach ersten Antworten erstellen oder ein Interesse daran haben, den Lösungsweg zu verstehen. Meist ist nur eine kopierfähige Antwort vor der Abgabe der Übungsaufgaben erwünscht.

Asche auf mein Haupt. Denn eigentlich hätte ich es besser wissen müssen. Für den Z80 und 6502 habe ich zwar kleine Assembler-Routinen programmiert, aber in der Uni wurde dann der neue 68k die Basis für die Informatik-Prüfungen.

Das hatte ich verdrängt. Zum Erwerb von Programmierscheinen in der Uni waren es ohnehin nicht notwendig, Programmierkompetenz aufzubauen. Dumm nur, dass einige Absolventen tatsächlich glaubten, sie könnten jetzt programmieren.

Ja. Allerdings habe ich meinen programmiererischen Schliff durch einen begeisterten Prof bekommen - allerdings kein Informatiker sondern jemand aus der BWL. Die Informatiker waren damals voll auf APL, Prolog und Smalltalk und der BWL-Lehrstuhl bot als einziger schon was mit „C“ an.

Ciao, Allesquatsch