Benutzer-Werkzeuge

Webseiten-Werkzeuge


words:kernel_embedded:stack:drop

DROP

: drop ( x1 --- ) 
  sp@ 
  1 cells +  \ Prinzip: Stackpointer inkrementieren. (Beispiel aus gForth)
  sp! ; 

In diesem theoretischen Beispiel wächst der Stack physikalisch hin zu niedrigeren Adressen. Daher wird durch inkrementieren des Stackpointers um eine CELL-Breite das drop realisiert. Die logische Richtung und die physikalische Richtung stimmen hier nicht überein. Gewöhnlich wird drop in Maschinencode geschrieben und nicht in High-Level-Forth.

Als praktisches Beispiel in Assembler für den Maschinencode dient das MVP-forth für den 6502. Es ist ein 16-bit Forth implementiert auf einer 8-bit Maschine. 1 CELLS ist daher 2 in diesem System.

Das X-Register im 6502 wurde als Stackpointer benutzt. Der Stack wuchs physikalisch auch hier in Richtung niedrigerer Adressen. Daher konnte der Stackpointer durch zweimaliges inkrementieren des X-Registers eine Zelle höher gestellt werden - was logisch ein drop ergibt.

DROP DA DROP+2
     JMP POP
     ...
POP  INX
     INX
     JMP NEXT 

Das Beispiel zeigt auch folgendes: Um eine zentrale Stelle für das Inkrement des Stackpointers zu haben wurde pop angelegt. Und alle Code-Sequenzen, die zuletzt noch ein Datenwert vom Stack entfernen müssen, können dort hin springen.

words/kernel_embedded/stack/drop.txt · Zuletzt geändert: 2010-12-29 18:12 von 127.0.0.1