robysan72 Inserito: 21 dicembre 2005 Segnala Share Inserito: 21 dicembre 2005 ciaoavrei bisogno una mano sull'aggiornamento dello stack.Sto gestendo un magazzino (per semplicità diciamo di 10 posizioni) con uno stack di 10 celle.Fino ad oggi non ho avuto problemi in quanto le operazioni su questo avvenivano in automatico con l'istruzione FIFO. Ora però si presenta la necessità di prelevare a volte da magazzino a prescindere dallo stack.Quindi ad esempio diciamo che l'operatore toglie il codice '1111' memorizzato in posizione 5.Come faccio a compattare lo stack?Ho provato con l'istruzione SRCH (DATA SEARCH) che dovrebbe restituirmi su IR00 la posizione del codice cercato (nella fattispecie 1111) ma in realtà se vado a leggere il registro di IR00 vedo che c'è scritto '1111' ... bella scoperta!!!Se invece avessi la possibilità di ottenere la posizione del codice cercato con una successiva istruzione di SDEL (DELETE STACK) opportunamente parmetrizzata potrei compattare lo stack togliendo il codice non più presente.Sperando di essere stato chiaro vi saluto e ... auguri di buone feste per chi è ancora con i piedi sotto la scrivania!Robysan Link al commento Condividi su altri siti More sharing options...
pcontini Inserita: 21 dicembre 2005 Segnala Share Inserita: 21 dicembre 2005 L'istruzione SRCH ti restituisce l'indirizzo della locazione di memoria dove si trova il dato cercato. Chiaro che se cerchi 1111 e l'istruzione trova il dato in tabella, IR00 punta al valore cercato.Prova a usare lo stesso indirizzo IR00 da passare alla SDEL per la posizione di cancellazione, dovrebbe andare.Ciao Link al commento Condividi su altri siti More sharing options...
robysan72 Inserita: 21 dicembre 2005 Autore Segnala Share Inserita: 21 dicembre 2005 sì avevo già provato ad inserire IR0 come oggetto da cancellare ma non lo accetta : l'istruzione SDEL viene contrassegnata in rosso (provare per credere).Allora l'ho passato come <,IR0> ma la virgola davanti significa purtroppo che punta al contenuto del registro e non alla posizione cercata.Non ne esco... Link al commento Condividi su altri siti More sharing options...
edogol Inserita: 22 dicembre 2005 Segnala Share Inserita: 22 dicembre 2005 Ciao!Forse non ho capito bene qual'è il problema, ma se al posto del codice 1111 riesci in qualche modo a metterci 0000, allora dopo puoi usare l'istruzione ASFT per compattare il tutto.Non ho mai provato ma dovrebbe funzionare... Buone feste a tutti!edogol Link al commento Condividi su altri siti More sharing options...
robysan72 Inserita: 22 dicembre 2005 Autore Segnala Share Inserita: 22 dicembre 2005 uhm un buon consiglioproverò immediatamente ( o meglio dopo le vacanze di Natale!)grazie Link al commento Condividi su altri siti More sharing options...
swplc Inserita: 23 dicembre 2005 Segnala Share Inserita: 23 dicembre 2005 Puoi usare tranquillamente l'istruzione SDEL, devi praticamente mettere nel secondo operando dell'istruzionel'OFFSET che ti devi scostare dall'ultimo indirizzo vuoto dello STACK.Te lo puoi calcolare in quanto conoscil'indirizzo fisico della tua cella (che contiene 1111) caricato in IR0 da SRCH e la profondità dello STACK, contenuta nel terzo e quarto parametro dello STACK.Fai la Differenza Lunga (istruzione -L) della profondità dello STACK e IR0 e ti trovi l'OFFSET da usare nel secondo operando dell'istruzione SDEL.Mi auguro di essere stato chiaro.Ciao! Link al commento Condividi su altri siti More sharing options...
Ospite drei Inserita: 27 dicembre 2005 Segnala Share Inserita: 27 dicembre 2005 Con un puntatore che passa per tutta l'area del fifo fai un cmp su tutti i valori fino a trovare quello che vuoi, quando lo trova metti a 0 il DM con quel valore e ASFT compatta l'area. Nei miei programmi mi capita abbastanza spesso di farlo.Caio, Andrea. Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 27 dicembre 2005 Segnala Share Inserita: 27 dicembre 2005 puoi gestire un magazzino con un array bidimensionale o tridimensionaleo qualora si necessiti di piu dati di array di strutture , dove ogni elemento dell`array , cioe una struttura none` altro che una riga della tabella .Il numero digitato dall`operatore lo interpreti come l`indice dell`array o meglio dire il puntatore alla tabella .In questa maniera puoi estrapolare tutti i dati che vuoi ciao Link al commento Condividi su altri siti More sharing options...
Ospite drei Inserita: 27 dicembre 2005 Segnala Share Inserita: 27 dicembre 2005 Array bidimensionale o tridimensionale? In quale modo? Link al commento Condividi su altri siti More sharing options...
swplc Inserita: 27 dicembre 2005 Segnala Share Inserita: 27 dicembre 2005 Con un puntatore che passa per tutta l'area del fifo fai un cmp su tutti i valori fino a trovare quello che vuoi, quando lo trova metti a 0 il DM con quel valore e ASFT compatta l'area. Nei miei programmi mi capita abbastanza spesso di farlo.Ricorda però di aggiornare il puntatore dello stack!!Con l'indirizzo della prima cella libera.. Link al commento Condividi su altri siti More sharing options...
Ospite drei Inserita: 27 dicembre 2005 Segnala Share Inserita: 27 dicembre 2005 della prima cella libera? Basta usare un puntatore che vada da DM0 a DM10 (il range usato in asft) cercare il valore e cancellarlo. Il puntatore può continuare a scorrere all'interno di quel range senza preoccuparsi di quale sia la prima cella libera.. Link al commento Condividi su altri siti More sharing options...
swplc Inserita: 28 dicembre 2005 Segnala Share Inserita: 28 dicembre 2005 Ti chiedo scusa, ma non si stava parlando di uno STACK?Secondo me la cosa più semplice da utilizzare quando si tratta di gestione magazzino o dati impilati,è appunto lo stack,con l'utilizzo delle istruzioni studiate al caso,senza dover ricorrere a mille stratagemmi..Ciao. Link al commento Condividi su altri siti More sharing options...
Ospite drei Inserita: 28 dicembre 2005 Segnala Share Inserita: 28 dicembre 2005 Per stack che cosa intendi? Non è un'area di memoria in cui vengono inseriti i dei dati ed istruzioni da elaborare?Nelle funzioni ASFT e SRCH ci si possono inserire solo delle aree di DM, almeno che io sappia. Il punto è che secondo me non ha senso invischiarsi con puntatori IR qualndo con un seplicissimo puntatore di DM e poche istruzioni si può risolvere il problema. E' chiaro che questo è solo il mio punto di vista, per fare la stessa cosa ci sono almeno 10 modi diversi.Ciao Link al commento Condividi su altri siti More sharing options...
swplc Inserita: 28 dicembre 2005 Segnala Share Inserita: 28 dicembre 2005 Con le Cpu CJ1 e CS1, il set delle istruzioni è stato notevolmente potenziato.Si possono creare delle matrici monodimensionali (STACK) con l'istruzione SSET,o polidimensionali con l'istruzione DIM.I due differiscono nelle istruzioni a corredo.Per lo STACK ci sono istruzioni che ti permettono di inserire dati nella PILA di canali che lo compongono(PUSH), estrarre gli ultimi o i primi dati scritti (LIFO, FIFO),cancellare (SDEL).E' direttamente lo STACK chenei suoi primi quattro canali tiene in memoria l'indirizzo sia dell'ultima cella che della prima libera.Tutto questo è molto più semplice, che utilizzare righe e righe di codice, che appesantiscono il programmasia nella velocità che nella memoria.. Ciao. Link al commento Condividi su altri siti More sharing options...
Ospite drei Inserita: 28 dicembre 2005 Segnala Share Inserita: 28 dicembre 2005 Non so quante istruzioni ci vogliono a fare una cosa del genere usando matrici e stack direttamente; per come la vedo io usando un semplice puntatore con 5 istruzioni circa ha finito.Ciao. Link al commento Condividi su altri siti More sharing options...
swplc Inserita: 28 dicembre 2005 Segnala Share Inserita: 28 dicembre 2005 Serve una sola istruzione per la definizione dello stack e una istruzione per eseguire le funzionidesiderate su di esso(inserire, cancellare, prelevare il primo o l'ultimo valore inserito).A questo bisogna aggiungere che le istruzioni delle tabelle possono essere eseguite in background,che quando abbiamo a che fare con programmi molto lunghi, puo tornare molto utile..Ciao. Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora