Mit Schleife DB-Werte rückwärts auslesen?

Rauchegger

Level-2
Beiträge
377
Reaktionspunkte
22
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo !

Eine Frage:
ich möchte von einem DB mit ca.500 DINT Werte´n, z.b die letzen 50 Werte mit einer Konsante auf <= oder >= vergleichen...
die Bedienung ist es aber vom letzten Wert weg die Daten einlesen!

Gibt es da eine Lösung ???

Ich kenne nur den weg mit dem erhöhen !

- L 4 // Lade 4
- SLW 3 // Schiebe 3 Stellen nach rechts
- +AR1
 
Moin,

Statt ein Offset auf dein Adressregister zu rechnen, könntest du die Adresse direkt berechnen und ins Adressregister schreiben. Nach jedem durchlaufen 4 Byte abziehen mit slw in pointer umwandeln und mit lar1 ins Register laden.

[CODE ]
L #letzteadresse
L 4
-I
T #letzteadresse
Slw 3
Lar1
Usw.
[/code]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und dann von der Startadresse weg mit der LOOP-Funktion eine Schleife basteln, mit jeder Schleife den LOOPCOUNT um 4 dekrementieren und bei Unterschreitung des letzten zu prüfenden Wertes aus der Schleife hüpfen.
 
Und dann von der Startadresse weg mit der LOOP-Funktion eine Schleife basteln, mit jeder Schleife den LOOPCOUNT um 4 dekrementieren...
und auf diese Art und Weise den Schleifenzähler pro Durchlauf um 5 dekrementieren, weil LOOP von sich aus schon eins abzieht.

Du kannst folgendes machen:
Code:
L   P#4.0
NEGD
+ AR1
Sieht zwar komisch aus, habe ich aber schonmal ausprobiert:
Man kann tatsächlich negative Werte zum Adressregister addieren und so subtrahieren.
Man könnte das noch verfeinern indem man gleich das negierte Integer-Pendant von P#4.0 lädt und sich so das NEGD spart.
 
Danke fürs erste !
werde Eure vorschläge gleich testen!

"M-Ott" wie sieht der negierte Integer-Pendant von P#4.0 aus??

mfg

Jürgen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ein POINTER ohne Speicherbereichsangabe ist ein nur ein Wert, der die Anzahl Bits ab Adresse 0.0 enthält, z.B. ist P#0.4 in DEZ-Darstellung 4, P#1.2 ist DEZ 10, P3.3 ist DEZ 27, demzufolge ist P#4.0 DEZ 32 und "-P#4.0" ist INTEGER -32.
 
Hallo!

Danke sehr Michael, hab es mit L L#-32 geschriebe unf funzt!!

Danke sehr !!

mfg
Jürgen

// --------------------- SCHLEIFE 2 --------------------- //
// -- Lade Anzahl der Messwerte in den Schleifenzähler -- //
M002: NOP 0
L #ANZ // Lade 0
L L#4
*D
SLW 3
LAR1
L #ACHSE // Lade 1/2 Anzahl der Messwerte
SCH2: T #ZAE // Transferiere in Zähler
L DBD [AR1,P#0.0] // Lade letzten wert aus dem DB
L #Staerke_Kor_2 // Lade die Brettstärke
>=D // Vergleiche auf größer
SPBN M003 // Springe nicht bei Bedingung
L #ZAE3 // Lade SchleifenZähler2
T #Wert2 // Gib ersten Wert aus "PROFILKANTE VORNE"
SPA M004
M003: NOP 0
L L#-32
+AR1
L #ZAE3 // Lade Zähler2
+ 1 // erhöhe um eins
T #ZAE3 // Transferiere in Zähler2
L #ZAE
LOOP SCH2
M004: NOP 0
 
Zurück
Oben