Stacks dumpen (gforth)

10/11/2007 - 01:23 von Michael Kalus | Report spam
Guten Morgen.

here 20 dump
1026548: 80 C0 0C C3 0C C3 0C 30 - C3 0C 0C 30 30 C3 0C 30 ...
0...00..0
1026558: C0 C3 03 0C 0C 33 0C 30 - C3 0C CC CC C3 0C C3 0C .
3.0
ok

Aber:
sp@ 10 dump
140E000:
*the terminal*:91: Stack underflow
sp@ 10 dump
^^^^

fp@ 40 dump
1412FF8: 40 5E C0 00 00 00 00 00 -
*the terminal*:88: Floating-point stack underflow
fp@ 40 dump
^^^^

Hm, was mache ich da falsch?
Michael
 

Lesen sie die antworten

#1 anton
10/11/2007 - 08:24 | Warnen spam
Michael Kalus writes:
Guten Morgen.

here 20 dump
1026548: 80 C0 0C C3 0C C3 0C 30 - C3 0C 0C 30 30 C3 0C 30 ...
0...00..0
1026558: C0 C3 03 0C 0C 33 0C 30 - C3 0C CC CC C3 0C C3 0C .
3.0
ok

Aber:
sp@ 10 dump
140E000:
*the terminal*:91: Stack underflow
sp@ 10 dump
^^^^

fp@ 40 dump
1412FF8: 40 5E C0 00 00 00 00 00 -
*the terminal*:88: Floating-point stack underflow
fp@ 40 dump
^^^^

Hm, was mache ich da falsch?



Der Stack waechst Richtung kleinere Adressen. Wenn im ersten Fall
nicht schon 10 bytes auf dem Stack sind und im zweiten Fall 40, dann
greift DUMP auf die Adressen unterhalb des Stacks bzw. FP-Stacks zu.
Das ist in Gforth aber ein geschuetzter Bereich, um Stack-Underflows
zu erkennen. Gforth sieht dann eine Segmentation Violation, schaut
sich die Speicheradresse an, auf die zugegriffen wurde, und produziert
dann auf Forth-Ebene eine Stack underflow exception.

Wie machst Du es richtig? So:

sp@ depth 1- cells dump
fp@ fdepth floats dump

Das kann in Zukunft allerdings durch stack-caching unerwartete
Resultate liefern.

- anton
M. Anton Ertl Some things have to be seen to be believed
Most things have to be believed to be seen
http://www.complang.tuwien.ac.at/anton/home.html

Ähnliche fragen