Questa istruzione permette di ricopiare una porzione di memoria di lunghezza specificata, a partire da una locazione sorgente, in una locazione di destinazione.
Sintassi |
move_mem (sorg, dest, num) |
---|---|
sorg |
È la variabile a partire da cui si intende iniziare a copiare. Non può essere una espressione matematica. Può essere un registro intero, reale o stringa, oppure una variabile locale intera, reale o stringa. |
dest |
È la variabile a partire dalla cui locazione viene scaricato il blocco di memoria ricopiato. Non può essere una espressione matematica. Può essere un registro intero, reale o stringa, oppure una variabile locale intera, reale o stringa. Nel caso dei registri, la copiatura viene estesa ai registri successivi a quello indicato come destinazione. Nel caso delle variabili locali, che avranno tipicamente almeno un indice, occorre fare attenzione a non tentare di trasferire un numero di elementi superiore alla dimensione dichiarata della variabile destinazione. In caso contrario si avrà in esecuzione un opportuno messaggio di errore in fase di esecuzione del programma. Questo controllo è eseguito solamente nel caso in cui dest sia una variabile locale. |
num |
È il numero di elementi da ricopiare. Può essere una espressione matematica. Il numero num non rappresenta un numero di bytes, ma un numero di elementi; ad es. nel caso di variabili reali, se si specifica num = 5, verranno ricopiate cinque locazioni reali consecutive della variabile specificata (in totale, 40 bytes). Il tipo di variabile sarà uguale al tipo di sorg. |
Validità |
Rule, Task. |
Note |
Il sistema non garantisce l'atomicità del buffer. Occorre prestare particolare attenzione se i dati mossi possono essere cambiati da più task a priorità diverse. |
Nel caso delle stringhe, il carattere 0 terminatore di stringa viene ricopiato solo se è compreso nel numero di caratteri di cui si richiede la copiatura. Di conseguenza, per trasferire interamente la stringa "ciao" occorre eseguire una move_mem con num = 5.
Esempio di utilizzo:
|