Bascom: Library Verständnisschwierigkeiten

Hallo Stefan!

Ich muss gestehen, dass ich diese Routinen gar nicht bearbeitet habe. :cool:
32bit oder gar 64bit Werte zerlege ich in BASCOM und übergebe dann die einzelnen "Bruchstücke"..... maximal 16bit, weil die Subroutinen dann diese sowieso wieder in zwei 8bit teilen.

Ähm...... PUSHT du einen 32bit oder 64bit Wert nicht in einzelnen Schritten zu 8bit auf den Stack?
Das müsste doch gehen und genauso könntest du sie dann alle mit STS (Beipsiel: STS $0060 R23) wieder zurückholen..... oder geht das so nicht?
Müsste ich mir auch erst mal ansehen.... aber du bist ja schon fast fertig damit. :wink:

Grüße,
Cassio
 
Hi Cassio,

Ähm...... PUSHT du einen 32bit oder 64bit Wert nicht in einzelnen Schritten zu 8bit auf den Stack?
Das müsste doch gehen und genauso könntest du sie dann alle mit STS (Beipsiel: STS $0060 R23) wieder zurückholen..... oder geht das so nicht?
was man auf den Stack pusht muß man auch wieder runter poppen ;)
STS – Store Direct to Data Space speichert dagegen ohne Änderung des Stackpointers im Speicher.
LDS – Load Direct from Data Space ist dann der Gegenpart zum STS.

Gruß
Dino
 
Hallo Dino!

Genau, so ist es! :wink:

Man PUSHT also einen Wert über das Register auf den Stack und kann ihn, ohne ihn zu verändern, via STS direkt in eine Speicherzelle "kopieren" und dort "manipulieren".
Totzdem hat man immer noch den Originalwert auf dem Stack, den man dann für die nächste Bearbeitung heranziehen kann.

Man muss also nicht zwangsläufig POP den Wert zurückholen. Kommt eben auf die Verwendung an. :wink:

Mit LDS hingegen lade ich doch "nur" einen Wert ins Register..... ohne ihn auf den Stack zu "sichern". :hmmmm:

Grüße,
Cassio
 
Nein, manipulieren kannst Du nur in den Rechenregistern (und sehr eingeschränkt in wenigen I/O-Registern). Du kannst mit sts/lds Bytes im Stack überschreiben bzw von da laden, ohne den Stackpointer zu verändern. Ebenso kannst Du den Stackpointer umsetzen, ohne die entsprechenden Bytes irgendwie zu behandeln - der Sinn dieser Aktionen sei mal dahingestellt.
 
Hallo,

Man PUSHT also einen Wert über das Register auf den Stack und kann ihn, ohne ihn zu verändern, via STS direkt in eine Speicherzelle "kopieren" und dort "manipulieren".
Totzdem hat man immer noch den Originalwert auf dem Stack, den man dann für die nächste Bearbeitung heranziehen kann.
...
Leider nicht so ganz ...
Nein, manipulieren kannst Du nur in den Rechenregistern (und sehr eingeschränkt in wenigen I/O-Registern). Du kannst mit sts/lds Bytes im Stack überschreiben bzw von da laden, ohne den Stackpointer zu verändern. ...
so schon eher.

Wenn du mit PUSH was auf den Stack legst dann kannst du es mit LDS aus der Speicherstelle des Stacks in ein Register packen. Es muß in einem Register sein weil es sonst nicht für die Verarbeitung in die ALU (Arithmetic Logical Unit) geladen werden kann. Danach landet das Ergebnis wieder im Register und wenn es an der ehemaligen Quelle (auf dem Stack) landen soll wo es abgeholt wurde dann mußt du es mit STS wieder dort speichern. Wenn du was vom Stack holst MUST du den Stackpointer bearbeiten weil sonst eventuell dort gelagerte Daten als Rücksprungadressen interpretiert werden könnten.

Böse Spielerei : Man lagert mit PUSH zwei Bytes als Rücksprungadresse auf dem Stack und führt danach ein RETURN aus. Dann wird an die Adresse gesprungen die durch diese beiden Bytes gebildet wird. Man könnte sich also quasi einen variablen Sprung basteln der aus einer Tabelle gespeist wird oder auf anderem Weg irgendwie berechnet wird. Versuch das mal mit Basic oder C ;)

Man kann mit Assembler ganz böse Spielereien treiben bei denen man aufpassen muß das man keinen Knoten ins Hirn bekommt :rolleyes:

Gruß
Dino
 
Hallo Cassio,

vielleicht komme ich am Wochenende dazu, mich nochmal um die Geschichte mit den 64bit-Zahlen zu kümmern. Alles andere funktioniert ja wie es soll. Ich bringe gerade noch mein Testprogramm in eine anständige Form und mache ein paar Kommentare rein. Du kannst ja schon mal einen neuen Thread starten, ich klinke mich dann ein.
 
Hallo Stefan!

Kann ich natürlich machen....
Ich wollte nur nicht unbedingt schon wieder der Ersteller und Namensgeber dafür sein. :wink:

Mal sehen, ob ich zum Wochenende damit anfange.
Momentan habe ich gerade die letzen Routinen für Touch fertig gestellt und ausprobiert.
Jetzt muss ich auch nur noch ein "aufgeräumtes" Beispielprogramm herrichten. :cool:

Grüße,
Cassio
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)