P4 teil1 ... verständnisse Frage

mazbu
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 23. Nov 2008 23:44

P4 teil1 ... verständnisse Frage

Beitrag von mazbu »

ich habe eine Problem mit dieser AufgabeTeil .
ich habe das MIPS-Code eingelesen , Meine Meinung nach muss ich jeder Programmzeile in Array Char Code [][] speichern .... aber was muss ich in Array reg[] und stack[] speichern . Wird pc mit 0 initialisiert ? danke

Benutzeravatar
m_stoica
Kernelcompilierer
Kernelcompilierer
Beiträge: 473
Registriert: 5. Dez 2008 20:19
Wohnort: Zuhause

Re: P4 teil1 ... verständnisse Frage

Beitrag von m_stoica »

reg[] sind deine MIPS*-Register
stack[] ist dein Hauptspeicher (der von MIPS*-Programmen wohl nur als Stack benutzt wird)
Die erste Zeilen in MIPS*-Programmen ist offensichtlich 1, deshalb würde ich pc mit 1 initialisieren

mazbu
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 23. Nov 2008 23:44

Re: P4 teil1 ... verständnisse Frage

Beitrag von mazbu »

nach dem ich dieser MIPS Code gelesen und code Zeile in Code [][] geschoben habe , initialisiere ich name , aktiv und pc aber wie wird reg und stack initialisiert?
einfach ein Array von 0 oder was ? muss ich betrachten wenn solche reg in MIPS Source Code initialisiert wird ..

Benutzeravatar
m_stoica
Kernelcompilierer
Kernelcompilierer
Beiträge: 473
Registriert: 5. Dez 2008 20:19
Wohnort: Zuhause

Re: P4 teil1 ... verständnisse Frage

Beitrag von m_stoica »

also wenn du den stack mit 0 initialisiert, kannst du sicher sein, dass du nichts falsch machst (MARS macht das ja auch)
Bei den Registern musst du aber noch den Stackpointer $sp beachten. Der ist zu beginn nämlich nicht 0, sonder 256, da wir beim
Stack ja "von oben nach unten" gehen

jonas
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 177
Registriert: 5. Okt 2008 21:35
Wohnort: DA

Re: P4 teil1 ... verständnisse Frage

Beitrag von jonas »

Wir haben 256 Einträge im Stack - d.h. 0..255.

Wenn ich mich recht erinnere gehört es zum guten Ton den Stackpointer erst runter zu zählen und dann etwas zu schreiben.
Initialisierst du den Stackpointer mit 256 und jemand möchte direkt schreiben gehts daneben.

Und als Anregung: Welchen Datentyp speicht ihr im Stack (wie breit ist er)? Bzw: um wieviel der Stackpointer pro Register was geschrieben wird runtergezählt?
Wenn man sich das klar macht ist 256 noch unsinniger.

Ps:
Die Aufgabenstellung fordert das der Code 80 Zeilen haben darf - das struct (welches ich nicht ändern wollte) hat auch Platz für 80-Zeilen. Jedoch ab 0 zählend.... Ist natürlich etwas mehr (Denk-)Aufwand bei den Sprung-Befehlen.

DVancura
Neuling
Neuling
Beiträge: 10
Registriert: 1. Okt 2008 07:08

Re: P4 teil1 ... verständnisse Frage

Beitrag von DVancura »

jonas hat geschrieben: Ps:
Die Aufgabenstellung fordert das der Code 80 Zeilen haben darf - das struct (welches ich nicht ändern wollte) hat auch Platz für 80-Zeilen. Jedoch ab 0 zählend.... Ist natürlich etwas mehr (Denk-)Aufwand bei den Sprung-Befehlen.
Hi,

Ich persönlich verstehe "• Höchstens 128 Befehle je Programm." ein wenig anders. Oder wie kommst du auf die Idee mit den 80 Zeilen?

Auch ist der "code" eine Matrix aus 128 * 80 chars, was ich bislang als 128 Code Zeilen von je maximal 80 Zeichen verstanden habe. Korrigier mich bitte jemand, wenn ich falsch liege :D

Aber mal eine andere Frage: Gefordert sind für "reg" in selbigem struct 32 Integer. Ich denke ebenfalls, dass diese für die verschiedenen Register gedacht sind, nur stehen in der Tabelle darüber lediglich 26 Register. Sehe ich das richtig, dass man lediglich diese 26 implementieren soll und die restlichen 6 außer Acht lassen kann?

Gruß Daniel

Benutzeravatar
m_stoica
Kernelcompilierer
Kernelcompilierer
Beiträge: 473
Registriert: 5. Dez 2008 20:19
Wohnort: Zuhause

Re: P4 teil1 ... verständnisse Frage

Beitrag von m_stoica »

jonas hat geschrieben:
Wenn ich mich recht erinnere gehört es zum guten Ton den Stackpointer erst runter zu zählen und dann etwas zu schreiben.
Initialisierst du den Stackpointer mit 256 und jemand möchte direkt schreiben gehts daneben.
Warum geht es schief? Du sagst doch selbst, dass der Stackpointer erst runtergezählt wird bevor auf das register zugegriffen wird

jonas
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 177
Registriert: 5. Okt 2008 21:35
Wohnort: DA

Re: P4 teil1 ... verständnisse Frage

Beitrag von jonas »

jonas hat geschrieben:
Wenn ich mich recht erinnere gehört es zum guten Ton den Stackpointer erst runter zu zählen und dann etwas zu schreiben.
Initialisierst du den Stackpointer mit 256 und jemand möchte direkt schreiben gehts daneben.
Damit meine ich, dass jemand nicht vorher runter zählt. Sich also NICHT an den guten Ton hält....

Benutzeravatar
m_stoica
Kernelcompilierer
Kernelcompilierer
Beiträge: 473
Registriert: 5. Dez 2008 20:19
Wohnort: Zuhause

Re: P4 teil1 ... verständnisse Frage

Beitrag von m_stoica »

da sieht man mal wie wichtig es ist sich an "den guten Ton" zu halten

Tobias
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 132
Registriert: 20. Okt 2004 14:17
Kontaktdaten:

Re: P4 teil1 ... verständnisse Frage

Beitrag von Tobias »

jonas hat geschrieben:Und als Anregung: Welchen Datentyp speicht ihr im Stack (wie breit ist er)? Bzw: um wieviel der Stackpointer pro Register was geschrieben wird runtergezählt?
Wenn man sich das klar macht ist 256 noch unsinniger.
Wenn man tatsächlich auf den Speicher zugreifen will, dann natürlich nur von "Adresse" 0 bis 255 einschließlich. Trotzdem ist 256 nicht Unsinn. Will man einen 32bit-Integer auf den Stack legen, muss man zuerst 4 Bytes abziehen (der Stack-Pointer wäre dann bei 252) und dann vier Bytes schreiben, nämlich auf die Bytes 252, 253, 254 und 255.
Wise people talk, because they have something to say; fools, because they have to say something. (Plato)

Telefonjoker
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 161
Registriert: 19. Apr 2008 21:02

Re: P4 teil1 ... verständnisse Frage

Beitrag von Telefonjoker »

DVancura hat geschrieben:Aber mal eine andere Frage: Gefordert sind für "reg" in selbigem struct 32 Integer. Ich denke ebenfalls, dass diese für die verschiedenen Register gedacht sind, nur stehen in der Tabelle darüber lediglich 26 Register. Sehe ich das richtig, dass man lediglich diese 26 implementieren soll und die restlichen 6 außer Acht lassen kann?
Konnte das mittlerweile mit einem Verantwortlichen geklärt werden?
Ich frage mich auch, warum wir ein Register $pc haben, und zusätzlich int pc.
Tobias hat geschrieben:Will man einen 32bit-Integer auf den Stack legen, muss man zuerst 4 Bytes abziehen (der Stack-Pointer wäre dann bei 252) und dann vier Bytes schreiben, nämlich auf die Bytes 252, 253, 254 und 255.
Muss man das Reinschreiben und Auslesen von Integern "von Hand" machen, oder gibt es irgend welche Zeiger Tricks?

fetzer
Kernelcompilierer
Kernelcompilierer
Beiträge: 522
Registriert: 1. Okt 2008 17:18

Re: P4 teil1 ... verständnisse Frage

Beitrag von fetzer »

Telefonjoker hat geschrieben:Muss man das Reinschreiben und Auslesen von Integern "von Hand" machen, oder gibt es irgend welche Zeiger Tricks?
Tipp: memcpy ;)

Antworten

Zurück zu „Archiv“