Forum: Mikrocontroller und Digitale Elektronik Maschinenbefehl


von Jantscher (technikp)


Lesenswert?

Ich habe ein Mikroprogram gegeben und soll bestimmen, welcher 
Maschinenbefehl implementiert wird:

mar := pc; rd;
rd;
ac := ac+1;
a := inv(mbr);
ac := ac+a ;

Wie soll man das herausfinden, welcher Maschinenbefehl implementiert 
wird, ich kann beschreiben, was das Mikroprogramm in den einzelnen 
Zeilen macht, aber ich kann jetzt keinen Maschinenbefehl nennen...
Kennt sich jemand aus?

von S. R. (svenska)


Lesenswert?

Zuwenig Details.

von Falk B. (falk)


Lesenswert?


von (prx) A. K. (prx)


Lesenswert?

Mir ist da ein RD zu viel drin, ansonsten ists auch so erratbar.

Tipp: Zweierkomplement-Negation ist Einerkomplement plus 1.

von Thomas Z. (usbman)


Lesenswert?

Ohne jetzt Details zu kennen, würde ich mal auf neg tippen (2er 
Komplement)

von (prx) A. K. (prx)


Lesenswert?

Das ist als Gesamtantwort falsch, ist ein Teil der Gesamtoperation.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Pat ". schrieb:
> ich kann beschreiben, was das Mikroprogramm in den einzelnen
> Zeilen macht

Dann mach mal. Und schau bei Gelegenheit nach, ob dieses Programm 
wirklich exakt so stimmt. Glaub ich nämlich nicht.

: Bearbeitet durch User
von wendelsberg (Gast)


Lesenswert?

mbr hat keinen zugewiesenen Wert.

wendelsberg

von (prx) A. K. (prx)


Lesenswert?

Muss es auch nicht. Kommt von aussen. So wirds wohl gemeint sein:
MAR = memory address register
MBR = memory (data) bus register

: Bearbeitet durch User
von Theor (Gast)


Lesenswert?

@ Pat

Der Witz ist doch, dass Du selbst überlegen sollst. Und Deine eigenen 
Denkprozesse beobachten und darüber nachdenken sollst.

Das ist, was im eigentlichen Sinn, mit "selbstständigem Arbeiten" 
gemeint ist.

Du willst doch (vermutlich) einen akademischen Grad erwerben.
Vorgesagte Lösungen hinmalen kann jeder noch so ungebildete Mensch. 
Dafür kriegt man allenfalls im Kindergarten ein Blümchen.

von Jantscher (technikp)


Lesenswert?

Das extra rd ist dafür da, weil man auf den Hauptspeicher zugreifen 
will, das braucht Zeit und damit es sequentiell abgearbeitet werden 
kann, wird nochmal extra rd hingeschrieben.

Ja, danke!!! jetzt sehe ich das auch, das das sicher das 
Zweierkomplement ist. Es wird das Einerkomplement gebildet und dann +1.

Aber wenn ich jetzt hinschreibe der Machinenbefehl ist das 
Zweierkomplement, ist das ja kein Maschinenbefehl...
Ein Maschinenbefehl ist ja immer eine Bitfolge aus 0 und 1, oder nicht?

Zu selbstständigen Denkprozeß: Das ist keine Aufgabe, die ich zu 
erledigen habe. Ich studiere etwas komplett anderes, aber ich finde es 
heutzutage wichtig die grungdlegenden Konzepte eines Digitalrechners 
annähernd zu verstehen. Hab die Aufgabe aus dem Internet. Aber ich 
verstehe was du meinst, ich werde aber kein Informatiker...

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Der Begriff "Maschinenbefehl" ist hier im Sinn von Assembler-Befehl 
gemeint, nicht die Bits der Codierung.

von (prx) A. K. (prx)


Lesenswert?

Was falsch ist: Es wird der Operand ausgehend vom PC (Program Counter) 
gelesen. Der PC wird aber nicht hochgezählt. Das geht also in die Hose, 
der nächste Befehl verwendet deshalb den Operanden diesen Befehls als 
Opcode. Da fehlt sowas wie PC=PC+1.

Eine Negation ist beteiligt, ist aber nicht der gesamte Befehl. Also 
wenn du es unbedingt fertig haben willst: Da wird vom Akku (ac) eine im 
Befehl enthaltende Konstante subtrahiert, indem deren Negation addiert 
wird. Und das ist ein für 8-Bitter recht typischer Maschinenbefehl.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Pat ". schrieb:
> Wie soll man das herausfinden, welcher Maschinenbefehl implementiert wird
Ich würde im Datenblatt des fraglichen µC die Befehlsliste suchen.

Pat ". schrieb:
> Ein Maschinenbefehl ist ja immer eine Bitfolge aus 0 und 1, oder nicht?
Ein Maschinenbefehl ist in binärer Form ein Bitmuster, das im Speicher 
abgeholt wird und Aktionen auf dem Prozessor auslöst. Es gibt aber auch 
eine Textform dafür, das nennt sich dann (vereinfacht) Assemblerbefehl.

> aber ich finde es heutzutage wichtig die grungdlegenden Konzepte eines
> Digitalrechners annähernd zu verstehen.
Das läuft aber auf einer völlig anderen Abstraktionebene ab. Um die 
Funktion eines Verbrennungsmotors zu verstehen, reicht es auch aus, zu 
wissen, dass Benzin mit Luft gemischt, dann verbrannt wird und sich 
dabei ausdehnt. Wie genau dieser chemische Verbrennungsprozess abläuft 
und was dabei der Unterschied zur Dieselverbrennung ist, ist dabei 
völlig uninteressant, solange du ihn nicht optimieren musst.

Und genau das selbe ist der Maschinencode: um einen "Digitalrechner" zu 
verstehen, reicht es aus, zu wissen, dass ein Hochsprachenprogramm in 
Maschinenbefehle umgesetzt wird, die nacheinander abgearbeitet werden. 
Wie das genau passiert ist bei jedem Prozessor unterschiedlich. Manche 
Prozessoren haben einzelne Maschinenbefehle, mit denen man z.B. ganze 
Speicherbereiche vergleichen oder kopieren kann (wie z.B. ein x86-CISC 
Prozessor mit 1 einzigen Maschinenbefehl), andere haben Befehle, die 
gleichzeitig multiplizieren und addieren (Signalprozessoren) und andere 
haben nur ganz simple Maschinenbefehle und auch nur ganz wenige (RISC), 
die aber schnell ausgeführt werden.
Und dann kommen da noch Geschichten wie Cache-Verwaltung und 
Speicherschutzmechanismen und Multicore und wasweißichnochalles mit ins 
Spiel.

Deshalb ist das genaue Verständnis eines Maschinenbefehls und dessen 
Auswirkungen eigentlich nur nötig, wenn du genau mit diesem Prozessor 
tiefer einsteigen willst.

Wenn du jetzt aber trotzdem und mit Fleiß den Ablauf im inneren einer 
CPU kennen lernen willst, dann empfehle ich dir das hier:
https://marian-aldenhoevel.de/papiercomputer/

: Bearbeitet durch Moderator
von wait4weltherrschaft-- (Gast)


Lesenswert?


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.