Quadratwurzel aus dem stackpointer?!?

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

Quadratwurzel aus dem stackpointer?!?

Beitrag von Herrzattacke »

Hab ich das richtig verstsanden?

Wir sollen die Quadratwurzel aus dem Stackpointer berechnen?

Böse Welt.
Alle sagten: "Das geht nicht!" Dann kam einer, der wusste das nicht und hat´s gemacht.

Thorti
BSc Spammer
BSc Spammer
Beiträge: 1047
Registriert: 1. Dez 2003 11:52
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von Thorti »

Hallo,

jo, sieht so aus. $r0.1 ist der Stackpointer. Aber ist ja für den Algo egal.
Was ich mich frage: Warum soll das nur eine 16b Zahl sein, und das Ergebnis nur 8b? Die Register sind doch alle 32b. Sollen wir also nur die letzten 16Bit des Registers $r0.1 nehmen?

Gruss Thorti
Assistent zur Vorlesung TGDI im WS 11/12

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

Beitrag von Herrzattacke »

scheint so, das wir nur die letzten 16 bit nehmen sollen.

Man sollte sich mal überlegen was denn da so rauskommen kann.

Die Maximal darstellbare Zahl in 16 bit, ist ja 65535 ((2^16)-1) die Wurzel daraus ist 255,9... d.h. man muss dann nurnoch abrunden und schon ist man fertig. (oder man verwendet den richtigen Algorithmus:)) ::hint::

Warum es nur 16 Bit sind kann ich nur Vermutungen anstellen. Ich nehme mal an das es was mit dem entrollen der schleifen zu tun hat (es soll ja nicht zu komplex werden)

Gruss HerrZattacke

A380
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 16. Dez 2003 21:36

Beitrag von A380 »

Ich vermute, dass für Ein/Ausgabe einfach die ersten beiden Register genommen wurden.
Die 16-bit kommen vermutlich von der Multiplikation die 16-bit breit ist. (Falls die jemand verwenden sollte) Dann ist die Anwendung der Multiplikation einfacher.

koch
Dozentin/Dozent
Beiträge: 221
Registriert: 4. Jul 2005 11:08

Beitrag von koch »

Wir sollen die Quadratwurzel aus dem Stackpointer berechnen?
$r0.1 als Stack-Pointer zu verwenden ist nur eine Konvention des VEX-ABIs. Da Ihr kleines Programm aber unabhängig von irgendwelchen Standardbibliotheken läuft, spielt das ABI hier keine Rolle. Im Gegensatz zu üblichen Prozessoren, bei denen Stack-Funktionen (z.B. bei CALL/RETURN) auf den Stackpointer festverdrahtet sind, ist dies bei VEX nicht der Fall. $r0.1 ist ein ganz normales Register, das (bei Verwendung des ABIs) wie ein Stackpointer benutzt werden soll.
Die 16-bit kommen vermutlich von der Multiplikation die 16-bit breit ist.
So ist es.

koch
Dozentin/Dozent
Beiträge: 221
Registriert: 4. Jul 2005 11:08

Beitrag von koch »

Es gibt möglicherweise doch besondere Effekte bei der Verwendung von $r0.1 als normales Register (nicht als Stackpointer). Falls Ihr Programm mit einer Fehlermeldung wie ``Buffer over/underflow'' etc. beendet werden sollte und auch keine .log Datei geschrieben wird, probieren Sie mal ein anderes Register anstatt $r0.1 (und schreiben mir das dann bitte auch in die Dokumentation!).

Dem ``echten'' Prozessor sollte es egal sein, aber der Simulator ist möglicherweise etwas empfindlicher. Meine eigenen Testprogramme laufen zwar alle auch mit $r0.1 korrekt durch, aber es gibt auch Beobachtungen, nach denen einzelne Schreibzugriffe auf $r0.1 das obige Verhalten hervorrufen.

Antworten

Zurück zu „Archiv“