Step 7 S7 Pointer AWL Erklärung

OHR-Newbie

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi die Herrschaften,

bin neu eingestiegen bei der programmierung von Pointern.
ich hab mal eine verständnisfrage zu den Pointern in S7, habe ein programm beispiel gefunden und verstehe es nicht zu 100%.

Code:
 L     32
schl: T     #l_i

      L     #l_anf_adr
      SLW   3
      LAR1  
      L     #l_i
      +     -1
      +AR1  
      U     DBX [AR1,P#64.0]            // Anf.Sollpos
      SPB   m1
      L     #l_i
      LOOP  schl
      T     #l_i
m1:   L     #l_i
      T     #l_pos_nr

in #l_anf_adr steht eine 100 als Intzahl 2 Byte

also habe das jetzt so verstanden er nimmt die 100 verschiebt es um 3 stellen (bitadresse) um es in ein pointer format zu bekommen, Dezimal wäre es dann 800 adressenmäßig gesehen 100.0
lädt dies in das adressregister 1
l 32dann -1 sprich 31
und addiert das auf Adressregister 1 steht dann im AR1 103.1 ???? das ist meine frage die ich nicht verstehe wie wandelt er die 31 Int in das pointerformat um ? wäre super wenn ich eine erklärung auch auf binärschreibweise bekommen könnte damit ich es 100% verstehe.

verschiebt es dann um stelle 64.0
sprich 167.1 ??????

bitte um aufklärung ! :D
danke im vorraus!
 
Du hast das richtig erfaßt.
32 hat er faktisch schon im Pointerformat hingeschrieben, also 32/8 = 4 INT.
Er hätte auch

L 4
SLW 3

schreiben können, dann hätte man das auch sofort gesehen.
Allerdings bin ich mit gerade nicht sicher ob 31 dann im Pointerformat nicht 3.7 ist???
Ich würde das dann mal im Simulator genau ansehen, wenn ich da Zweifel habe, finde ich immer sicherer.
P#64.0 ist tatsächlich ein Versatzt um 64.0, das siehst du richtig.
 
In dass Pointer format stehn das anzahl bits. SLW 3 = X 8
wenn der inhalt von pointer zb 44 int ist ist dass in pointer format 44/8 = 5 rest 4 = p# 5.4

Verstuurd vanaf mijn GT-I9301I met Tapatalk
 
sprich 31
und addiert das auf Adressregister 1 steht dann im AR1 103.1 ???? das ist meine frage die ich nicht verstehe wie wandelt er die 31 Int in das pointerformat um ?
Nein, in AR1 steht dann P#103.7
Die 31 wird nicht umgewandelt sondern das Bitmuster wird als Adresse/Pointer interpretiert.

Ein Bitmuster als Adresse P#x.y interpretieren: die niedrigsten 3 Bits sind die Bit-Adresse .0 ... .7 und die Bits davor sind die Byte-Adresse P#x(.0)
Das Bitmuster von dezimal 31 entspricht P#3.7 (das 31. Bit nach P#0.0)
Code:
0  = P#0.0
1  = P#0.1
7  = P#0.7
8  = P#1.0
9  = P#1.1
15 = P#1.7
16 = P#2.0
23 = P#2.7
24 = P#3.0
31 = P#3.7
32 = P#4.0

Das Programm sucht rückwärts von DBX 167.7 bis DBX 164.0 nach dem höchsten gesetzten Bit und liefert dessen Position 32 ... 1, bzw. 0 wenn kein 1-Bit gefunden.

Harald
 
Hilfe zu Step7 > Index > POINTER, Pointerformat
--> Format des Parametertyps POINTER
--> Verwenden des Parametertyps POINTER

Hilfe zu AWL > Index > Indirekte Adressierung
--> Bereichsinterne, registerindirekte Adressierung
--> Bereichsübergreifende, registerindirekte Adressierung
--> Speicherindirekte Adressierung

...

Harald
 
Zurück
Oben