Im DB Bit bestimmen

Move

Level-2
Beiträge
510
Reaktionspunkte
58
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

eine Frage, gibt es einen Baustein, der mir sagen kann welches Bit innerhalb eines Array gesetzt ist.
Beispiel: DB20.DBX0.0 WORD 4, also DBW0, DBW2, DBW4
Wenn jetzt hier ein Bit gesetzt wird müsste ich wissen es ist z.b das 20igste Bit (zählweise müsste man dann noch klären).

Gruß
Move
 
Sollte schon gehen.

Variante 1:

Du legst das AR1 auf das erste Word und incrementierst in einer Schleife das AR1 um jeweils P#0.1. Zusätzlich zählst du die Schleifendurchläufe.

Variante 2:

Du legst das AR1 auf das erste Word incrementierst in einer Schleife das AR1 um jeweils P#0.1. Wenn dann das indirekt adressierte Bit 1 ist, errechnest du aus dem Pointer das Word und das Bit. Die Bitadresse ergibt sich aus Bit 0+1+2 des Pointers, die Wordadresse hast du, nachdem du den Pointer um 3 nach rechts geschoben hast. (SRD 3)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
*
      AUF   DB    20                    //Quell-DB
      AUF   DI    30                    //Ablage DB für Nummern gesetzter Bits

      L     0                           //Adressregister
      LAR1                              // 
      LAR2                              //vorbereiten

      L     64                          //Anzahl der zu Überprüfenden Bits
next: T     MW    10                    //in Schleifenzähler
      U     DBX [AR1,P#0.0]                //ist Bit true
      SPBN  not
      L     MW    10                    //dann die Stelle des Bits
      L     -1
      *I    
      L     64
      +I    
      T     DIW [AR2,P#0.0]             //in Ablage-DB schreiben
      +AR2  P#2.0                       //für nächstes Ablagefach vorbereiten
not:  +AR1  P#0.1                       //nächstes Bit vorbereiten
      L     MW    10
      LOOP  next                        //und LOOOOOOOOOP
 
Zuletzt bearbeitet:
Hi,

also mit Thematik tue ich mich immer schwer.
Was muss ich jetzt machen?
Habe deine AWL so übernommen
Habe einen DB20 angelegt und einen DB30
Setzte im DB20 DW0 ein Bit und dann....?
Da tut sich erstmal nix

Gruß
Move
 
Hi,

also mit Thematik tue ich mich immer schwer.
Was muss ich jetzt machen?
Habe deine AWL so übernommen
Habe einen DB20 angelegt und einen DB30
Setzte im DB20 DW0 ein Bit und dann....?
Da tut sich erstmal nix

Gruß
Move

ein kleiner fehler hat sich eingeschlichen ... es muß natürlich DBX heißen... hab ich oben geändert...

der DB30 enthält ein ARRAY[0..63] of INT, darin werden die einzelnen bit nummern gespeichert ... siehe anhang...
 

Anhänge

  • bits.jpg
    bits.jpg
    194 KB · Aufrufe: 52
Zuletzt bearbeitet:
Zurück
Oben