Indirekte Adressierung mit 2 Pointern

TorstenX

Level-1
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,


ich habe ein Problem bei der indirekten Adressierung mit 2 Pointern.
Ich möchte aus 2 DB’s jeweils ein Bit aus einer Array- Funktion vergleichen und bei Ungleichheit ein Bit (Fehlermeldung) setzen. Das Array hat einen Bereich von [1..130]
Kann ich zwei untererschiedliche Pointer generieren und wenn ja wie kann ich sie unterscheiden? Wie gebe ich die Adressierung des DB am Pointer an und wie springe ich zum nächsten Bit welches einige Worte weiter weg ist?
1.Bit DB2.DBX5.0, 2.Bit DB2.DBX18.0, ..., bzw. 1.Bit DB4.DBX8.1, 2.Bit DB4.DBX28.1,... .


Mein Ansatz sieht momentan folgendermaßen aus:
(Hier sind aber noch am Anfang die absoluten Adressen und nicht die Pointer drin.)



Code:
U     DB2.DBX   5.0
UN    DB4.DBX   8.1
S     M   1.0              

U     M   1.0
SPB   FAIL              // springe zur Fehlermeldung

L     #count           // counter vergleich           
L     129
==I   
=     #RST_COUNT
U     #RST_COUNT                  
SPBNB RST
L     0
T     #count
RST:  NOP   0                           // reset counter auf 0

L     #count                   // bei Gleichheit vorwärts zählen 
+D    
INC   1
L     #pnt1                // 1.Pointer zum springen im Array
L     P#???

??
??
 
Hallo!

Zur "Unterscheidung" deiner Pointer kannst mit dem AR1 und dem AR2 arbeiten.
Das AR2 musst du aber vorher sichern und danach wieder zurücksichern.

Zur Erhöhung deines Pointers brauchst du nur zum Wert von AR1 bzw von AR2 deinen Offset dazu addieren.

Oder verstehe ich deine Frage falsch?

godi
 
Code:
U     DB2.DBX   5.0
UN    DB4.DBX   8.1
S     M   1.0              

U     M   1.0
SPB   FAIL              // springe zur Fehlermeldung

L     #count           // counter vergleich           
L     129
==I   
=     #RST_COUNT
U     #RST_COUNT                  
SPBNB RST
L     0
T     #count
RST:  NOP   0                           // reset counter auf 0

L     #count                   
L     P#13.0
*D
L     P#5.0
+D
T     #pntDB2                // TEMP  DWORD     Pointer mit adresse bit von DB2

L     #count                   
 
L     P#20.0
*D
L     P#8.1
+D
T     #pntDB2                // TEMP  DWORD     Pointer mit adresse bit von DB4

AUF DB2
U DBX [#pntDB2]
AUF DB4
U DBX [#pntDB4]
= M 1.0

??
??
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Da ich den Code mehrmals verwende und damit unterschiedliche DB’s (insgesamt 4 Vergleiche) Vergleiche, funktioniert das Ganze nicht mehr. Ich denke es liegt an den Aufrufen (AUF DB...). Dort scheint das Programm nicht mehr weiter zu laufen.
Kann es sein, dass ich zu viele Aufrufe mache und dann schon einen anderen Wert in den Akku schiebe??
 
... um auf die Frage sinnvoll antworten zu können wäre es nicht schlecht den aktuellen Stand deiner Arbeit als Code zu haben und vielleicht auch noch den Hinweiß was was bewirken soll ...

Gruß
Larry
 
Zurück
Oben