ANY-Pointer Adresse Symbolisch

Oele

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

ich möchte einen ANY-Pointer auf einen String zeigen lassen. Dieser String beginnt ab dem Lokalwort 10. Ich möchte den String wortweise auswerten. Dies geht ja wie folgt:

Code:
      LAR1  P##Zeiger_auf_String
      L       B#16#10                     // Syntax-ID
      T       LB [AR1,P#0.0]
      L       B#16#4                      // WORD
      T       LB [AR1,P#1.0]
      L       8                              // 8 WORD
      T       LW [AR1,P#2.0]
      L       10                            // LW 10
      SLD    3
      T       LD [AR1,P#6.0]
      L       B#16#83                   // Merker
      T       LB [AR1,P#6.0]

Meine Frage ist nun:
Vor dem SLD gebe ich ja die Anfangsadresse des Strings an. Ist dies auch symbolisch möglich? Ich möchte dies aber nicht als IN der Funktion haben. Es soll also nicht absolut adressiert sein. Denn wenn ich vor dem String eine neue temporäre Variable einfüge, zeigt der Pointer auf den falschen Bereich. Dies möchte ich verhindern. Wie kann ich also "L 10" ersetzen?
Ich würde da gerne sowas in der Art haben:

Code:
LAR1 P##String 
T       LD [AR1,P#6.0]
 
statt
 
  L       10                            // LW 10
  SLD    3
  T       LD [AR1,P#6.0]

Oder ist das so ähnlich nicht möglich?

Ich hoffe, ich habe mich einigermaßen verständlich ausgedrückt.

Gruß Oele
 
Das könnte schon so gehen.
Ich würde vor dem Bau des Any-Pointers die Adresse des Ziels in einer Zwischenvariable vom Typ DWord speichern.

Code:
LAR1 P##MyString
T adr_MyString

und dann im Code:
Code:
 LAR1  P##Zeiger_auf_String
      L       B#16#10                     // Syntax-ID
      T       LB [AR1,P#0.0]
      L       B#16#4                      // WORD
      T       LB [AR1,P#1.0]
      L       8                              // 8 WORD
      T       LW [AR1,P#2.0]
      L       adr_MyString                            // LW 10
//      SLD    3                     //brauchst du dann nicht, ist ja schon in der Variable als Adresse
      T       LD [AR1,P#6.0]
     [COLOR="Red"] L       B#16#83                   // Merker[/COLOR]
      T       LB [AR1,P#6.0]

Aber die 83 würde ich durch 86 ersetzen, du willst doch auf den Lokaldaten-Bereich zugreifen oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das klappt auch noch nicht...

Also so wie du es vorgeschlagen hast, hatte ich es auch bereits schon versucht. Das funktioniert so leider nicht, siehe Anhang.

Bei der absoluten Adressierung wird der Wert 50 errechnet.
Mit deinem Vorschlag wird was ganz anderes errechnet...

Wo liegt der Fehler? Ich sehe gerad den Wald vor lauter Bäume nicht...
 

Anhänge

  • Vorher - Nachher.doc
    41,5 KB · Aufrufe: 17
...:icon_redface: Das erklärt einiges.

Habs getestet. Ist ja auch logisch, dass man nun "SLD 3" nicht mehr benötigt.
Naja, der Wald und die vielen Bäume ne^^

Vielen Dank für eure Antworten!

Gruß Oele
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nun String in Datenbaustein

Und wie müsste ich das jetzt machen, wenn der String sich in einem Datenbaustein befinden würde?

String beginnt bei DBB0. Den Header des Strings will ich nicht auslesen. Deswegen starte ich bei DBB2.

Code:
    L     #DB_NR
    AUF   DB [#DB_NR]                 // Öffne DB
[COLOR=red]LAR1 P#DBB2                             // Dies will der Editor so nicht... Hier möchte ich dann z.B. MyString[1] angeben können[/COLOR]
    T     #adr_DB_String
 
// ....
 
      LAR1  P##Zeiger_auf_String
      L     B#16#10                     // Syntax-ID
      T     LB [AR1,P#0.0]
      L     B#16#6                      // DWORD
      T     LB [AR1,P#1.0]
      L     8                               // 8 DWORD
      T     LW [AR1,P#2.0]
      L     #adr_DB_String
      T     LD [AR1,P#6.0]
      L     B#16#84                     // DB
      T     LB [AR1,P#6.0]
 
Zuletzt bearbeitet:
mh, okay das müsste natürlich klappen.

Nur dann würde ich ja trotzdem fest das DBB2 als Anfangsadresse ansprechen. Dies wäre ja dann immer noch abolut adressiert. Wenn ich im Datenbaustein ein neues Element am Datenbaustein Anfang einfüge, greife ich ja dann auf den falschen Bereich zu. Würde das also lieber symbolisch machen.
Also z.B. LAR1 STRING_DB[1]
Ist dies in dieser Art irgendwie möglich?
 
Zurück
Oben