DB Vergleichen

Help

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen kann mir jemand behilflich sein,
ich soll einen DB mit einem Wert vergleichen bei übereinstimmung soll dann hochgezählt werden.
Um zu wissen wieviele werte nicht übereinstimmen.
Danke.
 
Sag' einfach Deinem Auftraggeber, daß Du keine Lust hast. "ich soll" ist irgendwie der falsche Ansatz ...

Um vernünftige Tipps zu geben ist mir Deine Aufgabe zu schwammig und unlogisch formuliert. Schreib' Deine Frage doch noch einmal etwas ausführlicher und sag uns, was Du bisher versucht hast und womit Du nicht zurecht kommst.

Harald
 
Hallo zusammen bin neu hier und hoffe das mir jemand behilflich sein kann.
Soll einen Db mit einem Wert vergleichen und sobald der wert nicht übereinstimmt, dan soll hochgezählt werden.
habe schon mal was vorbereitet aber funktioniert nocht nicht einwandfrei ich vergeleiche 2 Db mit einander und zähle dann die Werte die nicht übereinstimmen hoch. Problemm er durchsucht nicht die Anzahl die vorgegeben ist und bretter komplett durch den DB und geht in Stop.
Kann mir jemand Bitte behilflich sein.Danke.

L #start_address
SLW 3 // Pointer adaptation
T #adr
L #DB_Nr1 // DB1 load
T #DB_1
L #DB_Nr2 // DB2 load
T #DB_2
L #Number_DBW // Number of DB words to be compared
JMP1: T #Loop
AUF DB [#DB_1]
L DBW [#adr]
AUF DB [#DB_2]
L DBW [#adr]
<>I
SPB JMP2
L #adr
L 16 // add 2
+D
T #adr

CLR // set result = 0
= #result


L #Loop

LOOP JMP1
BEA

JMP2: NOP 0
SET
= #result


U #result
FP #HF

L #Zaehler
L L#1
+D
T #Zaehler
L #adr
L 16 // add 2
+D
T #adr

CLR // set result = 0
= #result
LOOP JMP1
 
Hallo,
wie lautet denn die Fehlermeldung zu dem "in Stop gehen" ?
Sind beide DB's so groß in Worten und nicht in Bytes), wie du die durchsuchen willst ?
Ist #adr ein Doppelwort ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe das erstmal nur überflogen...

Code:
L #start_address
SLW 3 // Pointer adaptation
[B][U]T #adr

[/U][/B]....

L #adr  
L 16 // add 2
+D 
T #adr

Dein #adr enthält ein Pointerformat und du addierst einfach 16 drauf. Ist das beabsichtigt ?
 
CLR // set result = 0
= #result
L #Loop
LOOP JMP1

anstatt L 16 schreib lieber L P#2.0 das ist verständlicher

und von 2 verschiedenen stellen den loop auszuführen halt ich auch nicht für schön.

Code:
L #start_address
SLW 3 // Pointer adaptation
T #adr
L #DB_Nr1 // DB1 load
T #DB_1
L #DB_Nr2 // DB2 load
T #DB_2
L #Number_DBW // Number of DB words to be compared
JMP1: T #Loop
AUF DB [#DB_1]
L DBW [#adr]
AUF DB [#DB_2]
L DBW [#adr]
<>I 
SPBN JMP2
L #Zaehler
L L#1
+D 
T #Zaehler

JMP2:L #adr
L P#2.0// add 2
+D 
T #adr

L #Loop
LOOP JMP1
 
Hallo zusammen, vorerst danke für eure Hilfe
.
Die dB sind zurzeit als word deklariert,sobald es funktioniert werde ich die dB in doppelwort ändern.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann liest oder schreibst Du in einem Bereich, der nicht mehr deklariert ist. Sprich: Dein Pointer zeigt auf eine zu große Adresse oder der DB ist zu kurz.

Ich mache mir für solche Anwendungen gerne eine Begrenzung rein, damit das nicht passiert.

Code:
L DBLG
T ANZ_BYTES

Damit wird die Länge des DB in Bytes ausgelesen. Bevor ich den Schleifenzähler erhöhe, frage ich ANZ_BYTES ab.
 
Ach ja die fehlermeldung lautet bereichslängen Fehler.
Danke
logisch. du hast vergessen den loop-counter vor dem loopnext zu laden. (siehe mein vorigen post, rot markiert).
also steht in deinem loopcounter irgendein wilder wert, der viel höher ist als dein db lang ist. du durchläufst also deine schleife viel zu oft und kommst ans bausteinende.
 
Zurück
Oben