DB nach Werten durchsuchen und die Anzahl des zu suchenden Wertes ausgeben

tigger

Level-1
Beiträge
66
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich möchte gerne ein DB170 (Array [1..100] Int) durchsuchen der 100 Integer enthält. Es sollen alle Int die den Wert 0 haben gezählt werden und in DB171.DBW2 angezeigt werden. Leider zählt mein Programm wie eine unendliche Schleife und hält nicht nach 100 Werten an. Ich hab schon hier im Forum einige Zeit verbracht und mir diese Struktur zusammengestellt, aber irgendwo ein Denkfehler. Ich hoffe es kann mir jemand weiterhelfen

Code:
      AUF   DB   170                    //zu durchsuchender DB
      LAR1  P#4.0                       //Pointer auf Start im DB, hier DBB4
      L     100                         //Anzahl der Int, die durchsucht werden
next: T     #zaehler                    //Momentaner Wert Schleifendurchgänge
      L     DBW [AR1,P#0.0]             // Lade Datenbyte
      L     0                           // Lade 0
      ==I                               // Vergleiche Wer mit 0
      SPBN  m1                          // Wenn Wert ungleich 0 dann springe zu m1
      L     DB171.DBW2              //Anzahl der Werte die Null enthalten
      L     1                           // Lade 1
      +I                                //Rechne Anzahl der Werte die Null enthalten Plus 1
      T     DB171.DBW2              //Transferiere neuen Wert in Anzahl der Werte die Null enthalten
 
m1:   +AR1  P#2.0                       //Erhöhe das Adressregister 1 um 2Byte (für Wort)
      L     #zaehler
      LOOP  next                        // Schleife solange, bis #zaehler auf 0

Gruß
 
Ich habs jetzt nicht ausprobiert. Aber was mir auffällt ist:
Der DB171.DBW2 muss vor allem Anderen erstmal wieder auf 0 gesetzt werden. Machst du das?
Ansonsten sieht es so aus als würde er nicht nur bis 100 zählen. Das tut er vermutlich aber natürlich jeden Zyklus. Und jedesmal addiert er alle wiedergefundenen 0en dazu.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube an einen anderen Fehler.
Nach dem vollqualifizierten Zugriff mit DB171.DBW2 wird nach dem ersten Durchlauf mit "L DBW [AR1,P#0.0]" ebenfalls auf DB171 zugegriffen, und nicht mehr auf den eigentlich geplanten DB170.
 
Nach der Loop sprungmarke könnte er den DB170 ja wieder öffnen. Dann passts doch wieder oder?

mfG René (Der da auch wieder SCL etwas übersichtlicher findet)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke euch Beiden

Ich habe es jetzt so gelöst:

Code:
NW1:
 L     0
      T     #nio_zaehler
      AUF   DB   170                    //zu durchsuchender DB
      LAR1  P#4.0                       //Pointer auf Start im DB, hier DBB4
      L     100                         //Anzahl der Int, die durchsucht werden
next: T     #zaehler                    //Momentaner Wert Schleifendurchgänge
      L     DBW [AR1,P#0.0]             // Lade Datenbyte
      L     0                           // Lade 0
      ==I                               // Vergleiche Wer mit 0
      SPBN  m1                          // Wenn Wert ungleich 0 dann springe zu m1
      L     #nio_zaehler                //Anzahl der Werte die Null enthalten
      L     1                           // Lade 1
      +I                                //Rechne Anzahl der Werte die Null enthalten Plus 1
      T     #nio_zaehler                //Transferiere neuen Wert in Anzahl der Werte die Null enthalten
m1:   +AR1  P#2.0                       //Erhöhe das Adressregister 1 um 2Byte (für Wort)
      L     #zaehler
      LOOP  next                        // Schleife solange, bis #zaehler auf 0

Code:
 NW2:
      L     #nio_zaehler
      T     DB171.DBW    2

Und so funktioniert es gut.
 
Zurück
Oben