Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Snapdragon Soung Gen 2 è la piattaforma Qualcomm per i dispositivi audio sempre più integrati nel mondo dell'intelligenza artificiale: al prorpio interno tanta potenza elaborativa per gestire al meglio le necessità d'uso dell'agentic AI
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-09-2015, 18: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, 21: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, 06: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, 09: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, 19: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, 14: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, 21: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, 11: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 12:56.
Eman993 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2015, 14: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, 16: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, 17: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, 15: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, 18: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, 14: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 15:47.
Eman993 è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2015, 21: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, 16: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 16:21.
Eman993 è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2015, 20: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


Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Eni mette un tetto ai prezzi dei carbura...
BYD Seagull (Dolphin Surf), l'elettrica ...
Multa milionaria per un data center del ...
F-Droid 2.0 si aggiorna con una nuova gr...
Microsoft ridisegna Copilot: dalla chat ...
Volkswagen porterà 20 videogiochi...
Troppa IA storpia: OpenAI licenzia in tr...
Marathon, Bungie svela i contenuti dell'...
Autunno, tempo di potature: i tagliasiep...
Meta Muse, due sviluppatori riescono a o...
Google AI Pro gratis: festa a sorpresa p...
MacSync colpisce macOS usando i calendar...
L'agente IA cancella 48 mila file in 103...
Jensen Huang avverte: l'AI può aiutare a...
Elettrico Renault in arrivo in Spagna: 6...
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: 21:20.


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