Buongiorno a tutti, nella realizzazione di una sorgente in ARM assembly per un microcontrollore della famiglia STM32, mi sono imbattuto in non pochi problemi, ma ora dovrei essere arrivato ad un punto di svolta, perchè sono riuscito a far funzionare correttamente i timer interni.
Tutto questo sarebbe perfetto, ma mi sono accorto che il mio codice sembra essere completamente inutile, perchè mi sono reso conto che l'onda quadra enerata, benchè fosse precisa e senza disturbi di alcun tipo, rimane sempre costante, anche se cambio il codice che la genera, variando le costanti dei registri che ne dovrebbero regolare i fronti ON ed OFF.
Io sospetto che la colpa sia del mio uso errato dell'istruzione TST, ovvero quella che è spiegata in questa pagina.
Per caso qualcuno nella community ha esperienza inquesto genere di programmazione? Mi potreste fare un esempio di come si usa questa istruzione? ad esempio se r1=0b11111111 allora, cosa produrrebbe l'istruzione "tst r1,0x04" ? e ser1=0b11100111
Grazie mille a tutti.
[ARM ASSEMBLY] Significato istruzione TST e TEQ?
- DoctorStrange
- Imperturbabile Insigne

- Messaggi: 2926
- Iscrizione: mercoledì 14 ottobre 2015, 9:33
- Desktop: Gnome3
- Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
- Sesso: Maschile
- Località: Roma, Italia
- runblade
- Scoppiettante Seguace

- Messaggi: 396
- Iscrizione: martedì 3 aprile 2007, 14:28
- Distribuzione: 16 Valvole monoalbero in testa.
- Località: Soave
Re: [ARM ASSEMBLY] Significato istruzione TST e TEQ?
ser1=0b11100111... sembra una assegnazione a variabile...Non esiste una istruzione ser1....
tst r1,0x04 -> se in r1 il bit 0x04 del registro è settato (esegue la AND) allora si setta il flag di zero per cui se segue una BEQ <label> il PC salta a <label>
Aggiornamento: 0x04=0b00000100 eseguo la end (TST) con:
0b00000100
__________________________________________________________
0b11111111 -> flag Z=0
0b11100111 -> flag Z=0
0b11111011 -> flag Z=1 <-ma aggiungo io
tst r1,0x04 -> se in r1 il bit 0x04 del registro è settato (esegue la AND) allora si setta il flag di zero per cui se segue una BEQ <label> il PC salta a <label>
Aggiornamento: 0x04=0b00000100 eseguo la end (TST) con:
0b00000100
__________________________________________________________
0b11111111 -> flag Z=0
0b11100111 -> flag Z=0
0b11111011 -> flag Z=1 <-ma aggiungo io
Ultima modifica di runblade il mercoledì 7 giugno 2017, 11:28, modificato 2 volte in totale.
-Pensare che i videogames possano aver condizionato le menti delle persone è come se chi avesse giocato a pac-man ora ce lo ritovassimo in un ambiente buio, al suono di musica tecno, che gira attorno la pista e continuamente si impasticca...
-Non discutere mai con un idiota: ti trascina al suo livello e poi ti batte con l'esperienza
-Non discutere mai con un idiota: ti trascina al suo livello e poi ti batte con l'esperienza
- DoctorStrange
- Imperturbabile Insigne

- Messaggi: 2926
- Iscrizione: mercoledì 14 ottobre 2015, 9:33
- Desktop: Gnome3
- Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
- Sesso: Maschile
- Località: Roma, Italia
Re: [ARM ASSEMBLY] Significato istruzione TST e TEQ?
Prima di tutto ti ringrazio per la risposta.
Logicamente non esiste alcuna istruzione ser, intendevo scrivere: "se r1 fosse uguale a 0b11100111" allora...
Non ho battuto lo spazio tra SE ed R1. Chiedo scusa per la svista, ma mi sono reso conto che, un refuso così semplice, in un contesto così particolare, può essere realmente confuso con un'istruzione assembly.
Comunque grazie per l'interessamento
Quello è in realtà solo un mio errore di battitura.runblade ha scritto:ser1=0b11100111... sembra una assegnazione a variabile...Non esiste una istruzione ser1....
Logicamente non esiste alcuna istruzione ser, intendevo scrivere: "se r1 fosse uguale a 0b11100111" allora...
Non ho battuto lo spazio tra SE ed R1. Chiedo scusa per la svista, ma mi sono reso conto che, un refuso così semplice, in un contesto così particolare, può essere realmente confuso con un'istruzione assembly.
In questo sono d'accordo, ma mi riservo il beneficio del dubbio, devo fare alcuni test con il compilatore assembly e ti farò sapere a breve.runblade ha scritto:tst r1,0x04 -> se in r1 il bit 0x04 del registro è settato (esegue la AND) allora si setta il flag di zero per cui se segue una BEQ <label> il PC salta a <label>
Comunque grazie per l'interessamento
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti