DB-Adresse zusammenfügen, indirekte Adressierung

Grimsey

Level-2
Beiträge
543
Reaktionspunkte
32
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich möchte auf Daten aus einem DB zugreifen. Die Daten liegen in einem Array im DB. Die Adresse der Daten berechne ich mir. Ich möchte nun den Inhalt bestimmter Feldeinträge z.B. in ein MW übertragen.
Ich scheitere momentan aber am zusammensetzen der Adresse.

Bsp.:

Berechnung von Ergeb

AUF DB16
L DBD[#Ergeb]
T DB16.DBD2704

Ab der Zeile "L DBD[#Ergeb]" steht im Akku nur noch 0. In der Hardware bekomme ich die Meldung: "Ausrichtungsfehler beim Lesen, Falsche Adresse 162".

Was mache ich falsch?

Danke Euch!
 
Servus,

Ausrichtungsfehler heisst nichts anderes als das die nicht auf ein komplettes MW zugreiffst sondern auf eine Bitadresse die nicht bei Bit 0 beginnt.
dein #Ergeb muss bei einer Adress anfangen die einer gültigen Adresse entspricht. wenn du also als #Ergeb 162 bekommst und auf die Adresse 162.0 zugreiffen willst musst du erst auf Pointerformat wandeln. Würdest du sie nicht wandeln greifst du mit deinem Beispiel auf die Adresse 16.2 zu und funktioniert bei einem Wortzugriff nicht.

ich schreeibs als Beispiel was du machen musst.

die Variable Ergeb muss im Dword-Format vorliegen, und beinhaltet nach der Wandlung die Adresse im Pointerformat. den Offset P#0.0 der nach dem Beistrich steht in ein zusätzlicher offset der zu der Variable Ergeb addiert wird.

l #Ergeb
sld 3
t #Ergeb
L DBD[#Ergeb,p#0.0]
T DB16.DBD2704
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke funktioniert. Allerdings kann ich bei mir nicht "L DBD[#ergeb,p#0.0] angeben. Ich muss stattdessen "L DBD[ar1,p#0.0]" schreiben.

Mit #Ergeb mag er es nicht.
 
Danke funktioniert. Allerdings kann ich bei mir nicht "L DBD[#ergeb,p#0.0] angeben. Ich muss stattdessen "L DBD[ar1,p#0.0]" schreiben.

Mit #Ergeb mag er es nicht.

Das ist auch so richtig, es handelt sich hier um zwei verschiedene Adressierungsarten:

Code:
L    DBD [#erg] = [B]Speicherindirekte Adressierung[/B]
 
L    DBD [AR1,P#0.0] = [B]Registerindirekte Adressierung[/B]

Den Offset mit dem Zeiger P#0.0 gibt es nur bei der registerindirekten Adressierung.

Hier noch einmal ein Vergleich der verschiedenen Adressierungsarten:

Code:
[B]Speicherindirekte Adressierung:[/B]
 
L    P#4.7
T    MD 24
S    A [MD24]
 
[B]Registerindirekte Adressierung bereichsintern:[/B]
 
LAR1 P#4.7
S    A [AR1,P#0.0]
 
[B]Registerindirekte Adressierung bereichsübergreifend:[/B]
 
LAR1 P#A4.7
S    [AR1,P#0.0]

Gruß Kai
 
Zurück
Oben