[ARM ASSEMBLY] Significato istruzione TST e TEQ?

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
DoctorStrange
Imperturbabile Insigne
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

[ARM ASSEMBLY] Significato istruzione TST e TEQ?

Messaggio da DoctorStrange »

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.
Avatar utente
runblade
Scoppiettante Seguace
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?

Messaggio da runblade »

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
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
Avatar utente
DoctorStrange
Imperturbabile Insigne
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?

Messaggio da DoctorStrange »

Prima di tutto ti ringrazio per la risposta.
runblade ha scritto:ser1=0b11100111... sembra una assegnazione a variabile...Non esiste una istruzione ser1....
Quello è in realtà solo un mio errore di battitura.
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.
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>
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.

Comunque grazie per l'interessamento :)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti