3 Datenbausteine vergleichen ??

Techniker1907

Level-1
Beiträge
119
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
folgendes:
wenn db40.dbw60 den wert 2 hat
und db40.dbw70 den wert 1 hat
und db40.dbw 80 den wert 0 hat, möchte ich folgende funktion haben.

dann will ich eine null laden und in den db40.dbw100 laden.
L 0
t db40.dbw 100

wie kann ich die 3 db´s vergleichen ?
 
... du vergleichst die 3 Worte einzeln mit deiner Vorgabe und wenn alle 3 Bedingungen erfüllt sind führst du deine Funktion aus...

Thomas
 
Code:
      U(                                //UND-Verknüpfung
      L     DB200.DBW   60
      L     2                           //Vergleicher DBW = 2
      ==I   
      )     
      U(                                //UND-Verknüpfung
      L     DB200.DBW   70
      L     1                           //Vergleicher DBW = 1
      ==I   
      )     
      U(                                //UND-Verknüpfung
      L     DB200.DBW   80
      L     0
      ==I                               //Vergleicher DBW = 0
      )     
      SPB   ok                          //wenn UND-Verknüpfung erfüllt ist Sprung zu ok:
      BEA                               //wenn UND-Verknüpfung nicht erfüllt ist Bausteinende

ok:   L     0                           //Wert 0 laden und in DBW transferieren
      T     DB200.DBW  100

Hups da war schon einer schneller!
 
Code:
      U(                                //UND-Verknüpfung
      L     DB200.DBW   60
      L     2                           //Vergleicher DBW = 2
      ==I   
      )     
      U(                                //UND-Verknüpfung
      L     DB200.DBW   70
      L     1                           //Vergleicher DBW = 1
      ==I   
      )     
      U(                                //UND-Verknüpfung
      L     DB200.DBW   80
      L     0
      ==I                               //Vergleicher DBW = 0
      )     
      SPB   ok                          //wenn UND-Verknüpfung erfüllt ist Sprung zu ok:
      BEA                               //wenn UND-Verknüpfung nicht erfüllt ist Bausteinende

ok:   L     0                           //Wert 0 laden und in DBW transferieren
      T     DB200.DBW  100

Hups da war schon einer schneller!

BEA ist Sch... wirklich. Wenn das ein Anfänger in die Hände bekommt wundert er sich, warum Code im nächsten Netzwerk nicht ausgeführt wird. Mach doch lieber einen Sprung hinter

Code:
ok:   L     0                           //Wert 0 laden und in DBW transferieren
      T     DB200.DBW  100
end: NOP 0

also statt

Code:
BEA

lieber

Code:
SPA end

dann kann man auch danach noch weiteren Code platzieren.

Oder noch einfacher

Code:
SPB ok

weglassen und statt dessen lieber

Code:
SPBN end

schreiben.

PS: Ich weiß, ist nur ein schnell hingeschriebenes Beispiel, daher mal meine Anmerkung.
 
Zuletzt bearbeitet:
@Ralle: Da hast du recht, wenn man den BEA Befehl vielleicht nicht kennt, dann kann man sich damit auf den A.... setzen! Danke für die Anmerkung
 
da ich mit klammern nicht klar komme hier mal ohne diese:

Code:
*
      LAR1  P#60.0
      AUF   DB   200

      L     3
next: T     #iLoop
      L     DBW [AR1,P#0.0]
      +     1
      ==I   
      SPBN  end
      +AR1  P#10.0
      TAK   
      LOOP  next
      T     DBW [AR1,P#10.0]
end:  NOP   0
 
da ich mit klammern nicht klar komme hier mal ohne diese:

Code:
*
      LAR1  P#60.0
      AUF   DB   200

      L     3
next: T     #iLoop
      L     DBW [AR1,P#0.0]
      +     1
      ==I   
      SPBN  end
      +AR1  P#10.0
      TAK   
      LOOP  next
      T     DBW [AR1,P#10.0]
end:  NOP   0

Ist ja schön und ich glaube Dir auch das das geht. Würde das auch gern verstehen. Nett wären ein paar Kommentare dahinter. Bedenke hier sind auch ein paar ältere (oder besser gesagt nicht so geübte)User.
Danke
 
Ist ja schön und ich glaube Dir auch das das geht. Würde das auch gern verstehen. Nett wären ein paar Kommentare dahinter. Bedenke hier sind auch ein paar ältere (oder besser gesagt nicht so geübte)User.
Danke

Code:
*
      LAR1  P#60.0                      //Anfangsadresse laden
      AUF   DB   200                    //DB aufreissen

      L     3                           //Schleife initialisieren
next: T     #iLoop
      L     DBW [AR1,P#0.0]             //Vergleichsfeld laden
      +     1
      ==I                               //mit Schleifenzähler vergleichen
      SPBN  end                         //ungleich? -> keine UND-Verknüpfung mgl. -> ENDE
      +AR1  P#10.0                      //gleich -> nächstes Feld ansteuern
      TAK                               //Schleifenzähler aus AKKU2 in AKKU1
      LOOP  next                        //und next
      T     DBW [AR1,P#10.0]            //wenn die Schleife beendet wurde, also ohne Sprung zu ENDE wird der Wert des Schleifenzählers (0) ins Zielfeld geschrieben
end:  NOP   0

bitte schön
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
*
      LAR1  P#60.0                      //Anfangsadresse laden
      AUF   DB   200                    //DB aufreissen

      L     3                           //Schleife initialisieren
next: T     #iLoop
      L     DBW [AR1,P#0.0]             ///Anfangsadresse laden
      +     1
      ==I                               //mit Schleifenzähler vergleichen
      SPBN  end                         //ungleich? -> keine UND-Verknüpfung mgl. -> ENDE
      +AR1  P#10.0                      //gleich -> nächstes Feld ansteuern
      TAK                               //Schleifenzähler aus AKKU2 in AKKU1
      LOOP  next                        //und next
      T     DBW [AR1,P#10.0]            //wenn die Schleife beendet wurde, also ohne Sprung zu ENDE wird der Wert des Schleifenzählers (0) ins Zielfeld geschrieben
end:  NOP   0
bitte schön

für mich erst mal noch offene Fragen:
//Anfangsadresse laden -->von was ? warum 60 ?
//Anfangsadresse laden --> was steht da drin ?
 
für mich erst mal noch offene Fragen:
//Anfangsadresse laden -->von was ? warum 60 ?
//Anfangsadresse laden --> was steht da drin ?

aus dem anfangspost: wenn db40.dbw60 den wert 2 hat

das ist das erste feld, dass abzufragen ist (logische zählweise bei pointern immer hoch, alles andere wird umständlich)

P#60.0 repräsentiert einen Pointer, der in den letzten 3 bit die bit-adresse gespeichert hat und in den restlichen die byte adresse, also dezimal den wert 480 hat.
damit wird das adressregister 1 befüllt, mit dem man die indirekte adressierung im folgenden bewerkstelligen kann
 
da ich mit klammern nicht klar komme hier mal ohne diese:

Code:
*
      LAR1  P#60.0
      AUF   DB   200
 
      L     3
next: T     #iLoop
      L     DBW [AR1,P#0.0]
      +     1
      ==I   
      SPBN  end
      +AR1  P#10.0
      TAK   
      LOOP  next
      T     DBW [AR1,P#10.0]
end:  NOP   0

Hi,

ohne Zweifel dein Code funktioniert. Allerdings sehe ich dann doch lieber ein paar Klammern anstelle einer Schleife. Ich gebe dir recht bei z.B. mehr als 5 Worten die verglichen werden sollten. Ich seh hier auch oft Programme mit Schleifen und mit ein wenig Übung versteht man die auch... aber denke ich an den kleinen Instandhalter dann versteht der nichts mehr und dem sind sicherlich ein paar Klammern lieber. Wobei ich der Meinung bin bei dieser Aufgabe wäre FUP eine sehr verständliche Alternative. Aber lassen wir die Diskussion über KOP, FUP oder AWL.

just my 2 cent

PhilippL
 
Danke.
Muss allerdings zugeben das ich das so schnell nicht realiisiere.
Muss ich in einer ruhigen Minute noch mal angehen.
 
Zurück
Oben