Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




I Puntatori - aiuto


Messaggi consigliati

francescotiziano
Inserito:

salve a tutti

mi potreste aiutare passo per passo a combrendere istruzio dopo istruzionein maniera terra terra??????

mi scuso con tutti e ringrazio tutti

francesco

//;

// Cerazione Puntatore (primo numero sequenza)

//;

L P#50.0

LAR1

//;

fina a qua' e' chiaro sto puntando al bayt 50

// Creazione Numero dati da controllare

//;

L 20

nex0: T #Indice

//;

// Controllo Dato

//;

L DIB [AR1,P#0.0] qui sto puntando al bit 50 del db40 o cosa????? L 2

==I

R DB40.DBX 60.5

//;

// Se Verifica positiva salto a successiva Verifica

// in caso contrario continuo il controllo

//;

+AR1 P#1.0

//;

U DB40.DBX 60.5

SPB OkV1

//;

L 0

T DIB [AR1,P#0.0]

//;

OkV1: L #Indice

LOOP nex0


Inserita:
L DIB [AR1,P#0.0] qui sto puntando al bit 50 del db40 o cosa?????

Il registro indirizzi AR1 fino a questo punto contiene l'indirizzo di un byte 50.0 non meglio identificato.

L'istruzione

L DBI[AR1 , P#0.0]

carica nell'accumulatore il valore del byte 50 del blocco dati di istanza associato alla funzione FB.

Infatti AR1 contiene l'indirizzo del byte 50 (già detto) e P#0.0 indica un offset di 0

Inserita:

Allora:

AR1 = indice puntatore

LAR1 = carica indice AR1 con il contenuto di ACCU1

L DIB [AR1,P#0.0] = L DIB (nr che è scritto in AR1 + offset 0.0)

es AR1 = 50.0, allora istruzione eseguita è L DIB 50

L DIB [AR1,P#34.0] = L DIB (nr che è scritto in AR1 + offset 34.0)

es AR1 = 10.0, allora istruzione eseguita è L DIB 44

oppure se indirizzi a bit,

L 10 // carica 10 in accu1

LAR1 // scrivi in AR1 10 bit che è 1.1

U M [AR1,P#0.0] // esegue U M 1.1 (il decimo bit a partire da M0.0 (offset 0.0)

oppure

U M [AR1,P#10.0] // esegue U M 11.1 (il decimo bit a partire da M10.0 (offset 10.0)

oppure

U M [AR1,P#20.3] // esegue U M 21.4 (il decimo bit a partire da M20.3 (offset 20.3)

Attenzione che il formato puntatore utilizza i 3 bit meno significativi per indirizzare il bit e gli altri per i byte.

Se vuoi indicizzare il byte 30, puoi fare

L 30

SLW3 // shift a sx di 3

LAR1

Inserita:

infatti

L P#...

non e' altro che una macro che non fa altro che

L m0.0

slw 3

shiftare di 3 bit verso sinistra

francescotiziano
Inserita:

ciao

ancora una volta grazie a tutti

slw so' che fa sorrere tre bit verso sinistra , come vedete qualcosa inizio

ad imparare e questo grazie a voi tutti.

ma non so'il perche' lo si fa' !!!!!!

a presto

Inserita:
slw so' che fa sorrere tre bit verso sinistra ...ma non so'il perche' lo si fa' !!!!!!

perche' il puntatore e' composto da 32 bit; quelli piu' a sx ti indicano il tipo di area in memoria,

mentre quelli piu' a dx ti indicano il "byte.bit" puntato.

il "bit" puntato impegna 3 bit (di qui slw 3) mentre il byte impegna dal quarto bit in poi.

Se esegui solo un "slw 3" e' scontato che l'indirizzo di bit puntato sara' "0"; se questonon ti garba

ci puoi mettere in OR il valore del tuo bit.

Ciao.

Inserita:

come ti dice over , nel registro a 32 bit , i bit vengono mappati con un senso

come ti ha descritto

Perche?

Per che siemens ha sviluppato l'architettura delle sue cpu cosi

:)

francescotiziano
Inserita:

ciao

grazie a tutti come sempre ...........

in particolare ciao walter.

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...