5.Übung, 5.Aufgabe, Teil c

pentium
Neuling
Neuling
Beiträge: 4
Registriert: 21. Feb 2006 21:10
Wohnort: darmstadt

5.Übung, 5.Aufgabe, Teil c

Beitrag von pentium » 14. Dez 2006 10:59

Hallo,

kann jemand mir bitte erkären, wie die CNTD asemmbliert wird? ich kann nicht nachvollziehen. In der 1.Übung haben wir ein 16Bit-Befehlformat, wobei es ein Zweiadressbefehl ist. Bei CNTD haben die Befehle SUB, AND Wortgröße; wird nun auch etwas ändern? Oder hängt das Format enes Zweiadressbefehl nicht von der Befehlsgröße ab?

Danke schon mal für die Antwort!
Gruß,
pentium

Benutzeravatar
AlexB
Kernelcompilierer
Kernelcompilierer
Beiträge: 487
Registriert: 8. Jul 2004 09:51
Kontaktdaten:

Beitrag von AlexB » 14. Dez 2006 13:12

Auf dem Prozessordatenblatt ist auf der dritten Seite oben die Befehlsstruktur aufgemalt.
Die ersten zwei Bit werden benutzt, um zu definieren, ob es ein Doppelwort-, Wort-, Halbwort- oder Bytebefehl ist.

Wird z.B. SUB.W verwendet, dann lautet der Anfang des assemblierten Codes

Code: Alles auswählen

Binär:     10 000101 ...es folgen 12 Bit für src und 12 Bit für dst
Hex:       8- --5---     die Striche markieren hier nur, welche Bits für die Darstellung der Hexzahl herangezogen wurden    
die 10 bedeutet ".W", "000101" ist der Opcode (5) von SUB.

Hoffe, das hilft weiter. Ich habe leider Deine Fragestellung nicht ganz verstanden.
Aktuelle Veranstaltungen
"Hardwaremodellierungssprachen" [SS 2012] - Webseite - Jetzt im TUCaN't anmelden!
TUCaN't - wenn's mal wieder länger dauert.
Bild

Herrzattacke
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 143
Registriert: 20. Nov 2004 16:04

Beitrag von Herrzattacke » 14. Dez 2006 13:20

Wenn man auf seite 3 des Prozessordatenblatts nachschaut, dann sieht man, dass ein Befehl 32 bit lang ist (2+6+12+12). Dies entspricht dann genau einem Wort im Speicher.

Ich mach jetzt mal die Variante ohne Register, sprich Direktzugriff.

Sub.W #1, 0x3F70
entspricht:
Länge = \(10_2\) (2bit)
OPC = 0x5 = \(000101_2\) (6bit)
Source = #1 = \(0000 0000 0001_2\) (8bit Direktoperand siehe Datenblatt)
Destination = 0x3F70 = \(0000 0000 0000\) (32bit Direktoperand wird im nächsten Wort gespeichert)

und man erhält:

1000 0101 0000 0000 0001 1110 0000 1000
8 5 0 0 1 E 0 8

das zweite Wort ist ja gerade 0x3F70 da braucht man nicht weiter nachdenken.

Dann kommen 2 Wörter für add und dann noch ein Wort für rte.

Alles klar?

Gruß
Alle sagten: "Das geht nicht!" Dann kam einer, der wusste das nicht und hat´s gemacht.

pentium
Neuling
Neuling
Beiträge: 4
Registriert: 21. Feb 2006 21:10
Wohnort: darmstadt

Beitrag von pentium » 14. Dez 2006 14:11

Vielen Dank! ich habe jetzt verstanden. Ich habe gedacht, der OPC von SUB ist 2, sowie wir in der 1.Übung haben. Daher habe ich noch eine Frage? Die Opcodes von den Befehlen MOVE (1), SUB (2), ADD (3), JMP (5), BNE (12), CMP (33) (bzgl. 1.Übung) sind nur gültig für 16 Bit Befehlformat, oder? Im Prozessordatenblatt haben diese Befehle andere Opcodes. Mir ist nicht klar, wann welche Opcode benutzt wird?

Herrzattacke
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 143
Registriert: 20. Nov 2004 16:04

Beitrag von Herrzattacke » 14. Dez 2006 14:14

nimm immer das was auf dem Datenblatt steht!

Die erste Übung war etwas vereinfacht und deshalb nur 16bit.
Alle sagten: "Das geht nicht!" Dann kam einer, der wusste das nicht und hat´s gemacht.

Benutzeravatar
AlexB
Kernelcompilierer
Kernelcompilierer
Beiträge: 487
Registriert: 8. Jul 2004 09:51
Kontaktdaten:

Beitrag von AlexB » 14. Dez 2006 14:17

Der Prozessor aus Übung 1 ist ein vollkommen anderer als der, für den wir das Prozessordatenblatt haben. Folglich unterscheiden sich auch die Opcodes.
Es steht in den Übungen und wohl auch in der Klausur immer dabei, auf welchen Prozessor die Aufgabe Bezug nimmt.
Aktuelle Veranstaltungen
"Hardwaremodellierungssprachen" [SS 2012] - Webseite - Jetzt im TUCaN't anmelden!
TUCaN't - wenn's mal wieder länger dauert.
Bild

pentium
Neuling
Neuling
Beiträge: 4
Registriert: 21. Feb 2006 21:10
Wohnort: darmstadt

Beitrag von pentium » 14. Dez 2006 14:28

Danke für Eure Hinweise! :-)

Antworten

Zurück zu „Archiv“