Torna indietro   Hardware Upgrade Forum > Software > Programmazione

FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7
FRITZ!Repeater 1700 porta il Wi-Fi 7 dual-band nelle case connesse. Mette a disposizione fino a 2.880 Mbit/s su 5 GHz e 688 Mbit/s su 2,4 GHz, integrazione Mesh immediata via WPS con FRITZ!Box e funzioni smart come MLO per bassa latenza. Compatto, plug-and-play e pronto per il futuro, è la soluzione ideale per chi vuole coprire ogni angolo senza cavi o complicazioni
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica
La Fondazione Chips-IT ha presentato a Pavia il piano strategico 2026-2028 per rafforzare l'ecosistema italiano dei semiconduttori. Con un focus su ricerca, design, talenti e infrastrutture, la Fondazione punta a consolidare il ruolo dell'Italia nel Chips Act europeo, sostenendo innovazione, collaborazione industriale e sovranità tecnologica.
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud
Al Museo Alfa Romeo di Arese, Nutanix ha riunito clienti, partner ed esperti per .Next On Tour Italia e per mostrare come l’infrastruttura hybrid multicloud possa diventare il fondamento dell’innovazione, con una piattaforma capace di unificare applicazioni tradizionali, moderne architetture cloud-native e nuovi scenari basati sull’intelligenza artificiale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-09-2015, 19:17   #1
Eman993
Junior Member
 
Iscritto dal: Sep 2015
Messaggi: 8
[Assembly MC68000] Problema con i vettori - Urgentissimo(Esame a breve)

Ciao a tutti ragazzi, mi sto cimentando nella programmazione in assembly(Ho già studiato C++ e qualcosa in java), tuttavia ho un problema nel prendere un vettore e copiarlo in un altro. In pratica supponiamo che i voglia copiare vett1 in vett2:
Codice:
             
                          $ORG 8000
              VETT1   DC.B 1,2,3
              VETT2   DC.B 0,0,0
              N          DC.W 3
                          
                          $ORG      8100
                          MOVE.W  N,D0
              LOOP    CMP.W     #0,D0
                          BEQ         FINE
                          MOVE.B   (VETT1)+,(VETT2)+
                          ADD.W    #-1,D0
                          JMP         LOOP
              FINE     JMP         FINE
Ora la mia domanda è questa: è lecita l'operazione
Codice:
 MOVE.B   (VETT1)+,(VETT2)+
?
Oppure devo semplicemente fare
Codice:
 
MOVE.B (VETT1)+,(VETT2)
ADDA    #1,VETT2
E' il post-incremento al secondo operando che non mi convince tanto...
Grazie mille per l'aiuto!
Eman993 è offline   Rispondi citando il messaggio o parte di esso
Old 16-09-2015, 22:28   #2
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Tranquillo: è lecito, e il programma funziona.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2015, 07:12   #3
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Buonanotte (in tutti i sensi): il programma non può funzionare perché non puoi postincrementare VETT1 e VETT2. Infatti DEVONO essere registri indirizzo per poterlo fare. Dunque aggiungi un paio di istruzioni allo scopo, e modifica la MOVE in questione.

Scusami, ma ieri sera ero cotto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2015, 10:08   #4
Eman993
Junior Member
 
Iscritto dal: Sep 2015
Messaggi: 8
Ok dunque dopo aver effettuato la dichiarazione dei vettori devo copiarli in un address register entrambi in questo modo:
Codice:
           LEA VETT1,A0
           LEA VETT2,A1
E' lecita tale assegnazione? Oppure utilizzo una MOVEA?
Codice:
          MOVEA.L VETT1,A0
Scusate le tante domande ma il prof. non ci ha dato un libro da cui studiare e ha spiegato queste cose in sole 10 ore di corso
Eman993 è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2015, 20:50   #5
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da Eman993 Guarda i messaggi
Ok dunque dopo aver effettuato la dichiarazione dei vettori devo copiarli in un address register entrambi in questo modo:
Codice:
           LEA VETT1,A0
           LEA VETT2,A1
E' lecita tale assegnazione?
Sì, perché la LEA calcola l'indirizzo, e poi lo memorizza nel registro indirizzo.
Quote:
Oppure utilizzo una MOVEA?
Codice:
          MOVEA.L VETT1,A0
Non esattamente. In questo caso leggeresti una longword (4 byte) a partire dal primo byte di VETT1, e li memorizzeresti in A0.

Dovresti modificare l'istruzione utilizzando la modalità d'indirizzamento immediato, per calcolare l'indirizzo e memorizzarlo così com'è in A0, anziché andare a leggere dove punta:
Codice:
          MOVEA.L #VETT1,A0
Quote:
Scusate le tante domande ma il prof. non ci ha dato un libro da cui studiare e ha spiegato queste cose in sole 10 ore di corso
Purtroppo è un problema abbastanza comune, ma non ti rassegnare: studia per i fatti tuoi e fatti una cultura, che ti servirà dopo gli studi.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2015, 15:27   #6
Eman993
Junior Member
 
Iscritto dal: Sep 2015
Messaggi: 8
Ok ora mi è chiaro!
E se volessi passare dal primo al secondo elemento di VETT1 mi basterebbe fare una semplice
Codice:
ADD.B #1,VETT1
In questo modo avrei che VETT1 punta al secondo suo elemento no?
Grazie sempre per la tua disponibilità!
Eman993 è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2015, 22:15   #7
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
No, in questo modo incrementeresti di uno il primo elemento di VETT1.

Supponendo che A0 contenga l'indirizzo di VETT1, dovresti fare così:
Codice:
ADD.L #1,A0
E visto che la costante 1 è "piccola" (da 1 a 10), per ADD e SUB sono disponibili due varianti "veloci", quindi puoi scrivere così:
Codice:
ADDQ.L #1,A0
Se hai altri dubbi chiedi pure, ma, come vedi, non ti posso rispondere subito: solo quando ho un momento libero (e una tastiera).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2015, 12:09   #8
Eman993
Junior Member
 
Iscritto dal: Sep 2015
Messaggi: 8
Come sempre ti ringrazio per la disponibilità! Mi sono imbattuto in un esercizio che chiede di modificare un array utilizzando un sottoprogramma; il vettore deve essere passato tramite stack. Utilizzo l'istruzione PEA per mettere il vettore nello stack e nella subroutine copio l'indirizzo del vettore nel registro address A0(tramite lo stack). Quando vado ad esempio a fare una ADD
Codice:
ADD.B #1,(A0)
Ho modificato il valore originale del primo elemento del vettore giusto? Le parentesi indicano che sto andando a prendere il dato in memoria all'indirizzo contenuto in A0?

Ultima modifica di Eman993 : 19-09-2015 alle 13:56.
Eman993 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2015, 15:50   #9
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Esattamente.

Eventualmente in futuro riporta il codice (usando il tag CODE), così sarà possibile vedere se è tutto corretto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2015, 17:21   #10
Eman993
Junior Member
 
Iscritto dal: Sep 2015
Messaggi: 8
Perfetto! Credo di iniziare a capirci qualcosa anche se avendo già fatto esami di c++ sono avvantaggiato. Comunque adesso sto cercando di scrivere una bozza di driver che gestisca l'input da tastiera di un dato:
Codice:
               ORG   $8020
IF_CTRL   DC.B  1         Questo è il bit di controllo
               ORG   $8022
IF_DATA  DC.B   1        Questo è il bit data

              ORG   $8000
START    MOVE.B   #1,IF_CTRL  Asserisco il bit controllo
LOOP      BTST.B   #7,IF_DATA  Aspetto finché la tastiera non termina
              BEQ        LOOP
              MOVE.B  IF_DATA,D0  Memorizzo il dato 
              MOVE.B  #0,IF_CTRL  deasserisco il control bit  
              END        START
Che ne pensi? Può andare?
Eman993 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2015, 18:07   #11
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Se usi il bit 7 per controllare se c'è un dato da tastiera, sì, va bene.

P.S. Potresti anche usare CLR.B IF_CTRL per azzerare il valore di quella locazione.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 20-09-2015, 16:11   #12
Eman993
Junior Member
 
Iscritto dal: Sep 2015
Messaggi: 8
Grazie mille per tutto! Domani ho l'esame e speriamo vada tutto bene!!!
Eman993 è offline   Rispondi citando il messaggio o parte di esso
Old 20-09-2015, 19:21   #13
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Ti auguro di fare un buon esame.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2015, 15:51   #14
Eman993
Junior Member
 
Iscritto dal: Sep 2015
Messaggi: 8
Mauro l'esame non è andato proprio benissimo però me la sono cavata. Ho un dubbio enorme che sarà sicuramente la domanda del prof. all'orale:
Supponiamo di voler scrivere un programma per sostituire in una stringa la lettera a con il simbolo ? e la lettera b con il simbolo !. Ti posto il codice:
Codice:
               ORG    $8000
          A   DC.B    'CASE'
          N   DC.B    4
          B   DS.B    1
          C1 DC.B    'A'
          C2 DC.B    'B'
          S1 DC.B    '?'
          S2 DC.B    '!'    

                 ORG         $8100
      MAIN   MOVE.L     #B,-(SP)
                 MOVE.L     #A,-(SP)     
                 MOVE.B     N,-(SP)
                 MOVE.B     C1,-(SP)
                 MOVE.B     C2,-(SP)
                 MOVE.B     S1,-(SP)
                 MOVE.B     S2,-(SP)
                 JSR           SUB
                 ADDA        #16,SP
                 END          MAIN
In questo modo io voglio mettere il vettore modificato dentro la variabile B. Ma ho fatto bene a dichiararla in questo modo? Cioè è un vettore vuoto quello lì? Quando la subroutine farà
Codice:
               MOVE.B      5(SP),D0
               MOVE.L       16(SP),A0
                MOVE.B      D0,(A0)+
B "Diventerà" un array?
Perché in C++ quando voglio dichiarare una variabile faccio int i. Quando voglio dichiarare un array faccio int i[n]. In assembler c'è questa differenza?
P.S. il prof. ci tiene alla riusabilità del codice, quindi se ho fatto qualcosa di troppo particolare e poco generico me lo indichi? Grazie mille!

Ultima modifica di Eman993 : 21-09-2015 alle 16:47.
Eman993 è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2015, 22:09   #15
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da Eman993 Guarda i messaggi
Mauro
Cesare.
Quote:
l'esame non è andato proprio benissimo però me la sono cavata.
Benissimo. Lo scritto è un grosso scoglio, e averlo superato è già una gran cosa. Complimenti.
Quote:
Ho un dubbio enorme che sarà sicuramente la domanda del prof. all'orale:
Supponiamo di voler scrivere un programma per sostituire in una stringa la lettera a con il simbolo ? e la lettera b con il simbolo !. Ti posto il codice:
Codice:
               ORG    $8000
          A   DC.B    'CASE'
          N   DC.B    4
          B   DS.B    1
          C1 DC.B    'A'
          C2 DC.B    'B'
          S1 DC.B    '?'
          S2 DC.B    '!'    

                 ORG         $8100
      MAIN   MOVE.L     #B,-(SP)
                 MOVE.L     #A,-(SP)     
                 MOVE.B     N,-(SP)
                 MOVE.B     C1,-(SP)
                 MOVE.B     C2,-(SP)
                 MOVE.B     S1,-(SP)
                 MOVE.B     S2,-(SP)
                 JSR           SUB
                 ADDA        #16,SP
                 END          MAIN
In questo modo io voglio mettere il vettore modificato dentro la variabile B. Ma ho fatto bene a dichiararla in questo modo? Cioè è un vettore vuoto quello lì?
Non è un vettore vuoto: hai dichiarato la variabile B che è costituita di 1 solo byte. Poiché il vettore A è di 4 byte, non avrai abbastanza spazio e finirai per sovrascrivere C1, C2, ed S1.

Adesso non ricordo se la sintassi dell'assembler lo preveda, ma può darsi che tu possa dichiarare N e B in questo modo:
Codice:
N   DC.B    N-A
B   DS.B    N-A
N-A è la distanza fra N e A in termini di byte. Poiché N si trova esattamente dopo A, N-A sarà 4.

In realtà non avresti bisogno di dichiarare N, C1, C2, S1, ed S2 come variabili, ma semplicemente come costanti. Lo si fa usando EQU al posto di DC:
Codice:
          A   DC.B    'CASE'
          B   DS.B    B-A
          N   EQU    B-A
          C1  EQU    'A'
          C2  EQU    'B'
          S1  EQU    '?'
          S2  EQU    '!'
Ma in tal caso al posto di
Codice:
MOVE.B     N,-(SP)
ad esempio, dovrai usare l'indirizzamento immediato:
Codice:
MOVE.B     #N,-(SP)
Altra cosa importante, anche se utilizzi la MOVE.B, quando inserisci un dato nello stack, il "taglio" minimo è rappresentato da una word, per cui scriverai 2 byte anziché 1. Tienine conto quando devi farti i conti per vedere dove si trovano i tuoi parametri nello stack.
Quote:
Quando la subroutine farà
Codice:
               MOVE.B      5(SP),D0
               MOVE.L       16(SP),A0
                MOVE.B      D0,(A0)+
Intanto ti consiglio di definire delle costanti per gli offset di ogni parametro che si trova nello stack, altrimenti diventi matto a tenere i conti ogni volta che ti serve una variabile.
Quote:
B "Diventerà" un array?
Perché in C++ quando voglio dichiarare una variabile faccio int i. Quando voglio dichiarare un array faccio int i[n]. In assembler c'è questa differenza?
In assembly faresti:
Codice:
i DS.B n
Quote:
P.S. il prof. ci tiene alla riusabilità del codice, quindi se ho fatto qualcosa di troppo particolare e poco generico me lo indichi? Grazie mille!
Visto che usi una subroutine e gli passi tutti i parametri, direi che è abbastanza generico.

In ogni caso devi tenere presente che il tuo obiettivo è risolvere l'esercizio. Quindi non ti complicare la vita: implementa la soluzione più semplice che ti viene in mente e che lo risolve pienamente. Poi se c'è qualcosa da migliorare, ci penserai dopo, SE avrai tempo e avrà senso la modifica.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2015, 17:10   #16
Eman993
Junior Member
 
Iscritto dal: Sep 2015
Messaggi: 8
Perfetto! Direi che a meno di grosse sviste domani dovrebbe andare tutto bene, grazie mille ancora e scusa se ti ho chiamato Mauro (cdiMAURO)

Ultima modifica di Eman993 : 23-09-2015 alle 17:21.
Eman993 è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2015, 21:53   #17
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Non ti preoccupare: mi capita spesso, e non potevi sapere.

Allora fai un buon orale e prenditi questa materia.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica Fondazione Chips-IT, l'Italia alla riscossa nei ...
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud Nutanix: innovazione, semplicità e IA al ...
Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il notebook gaming 'budget' che non ti aspetti Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il n...
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
SpaceX redarguisce la Cina per un rischi...
Il 2026 sarà l'anno degli smartph...
Ayaneo svela Pocket Play: è uno s...
Apple sotto indagine in Svizzera: &egrav...
Anthropic, Kaplan avverte: entro il 2030...
La versione Global dello Xiaomi Pad 8 Pr...
Aumento di prezzo in arrivo per la Ninte...
Samsung Galaxy S26 Ultra, nuove conferme...
Robot aspirapolvere ancora ai prezzi del...
Un sacco di dispositivi Ring scontati su...
Hisense HS3100 a meno di 100€ su Amazon:...
Tomb Raider Catalyst è il sequel ...
Logitech G Yeti GX in offerta su Amazon:...
Le Sony INZONE H5 scendono a 99€ su Amaz...
Macbook Air M4 a 899€, Macbook Pro M5 -1...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:17.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v