imparare l'assembly

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
zxzxasas
Linux 2.x
Linux 2.x
Messaggi: 397
Iscritto il: sab 15 nov 2008, 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Re: imparare l'assembly

Messaggio da zxzxasas »

robbybby ha scritto:L'imparare a programmare e', sostanzialmente, indipendente dal linguaggio usato. Si puo' imparare a programmare in C. in C++, in Pascal, in Modula2 (chi se lo ricorda?), in Fortran, ecc.
Una volta che sai programmare, imparare un nuovo linguaggio e' "solo" questione di studiarsi un libro.

Non esistono programmi complessi scritti in assembler? Ti assicuro che esistono, specie dove ogni byte, o ogni microsecondo risparmiato e' importante. Ovviamente non parlo di programmi da milioni di righe di sorgente, ma di programmi un po' piu' piccoli.
Cosi' come esistono programmi complessi scritti in fortran, o in Cobol. Dipende dall'ambito in cui si e'.
Infatti ho detto chiaramente in ambito applicativo ;)

E' ovvio che se parliamo di un controllore in un reattore nucleare non ci si può permettere un' ottimizzazione a caso...Ma già quando si parla di driver un tantino complessi (vedi una stampante) non mi pare che si sviluppi tutto in assembler...

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: imparare l'assembly

Messaggio da Mario Vanoni »

robbybby ha scritto:L'imparare a programmare e', sostanzialmente, indipendente dal linguaggio usato. Si puo' imparare a programmare in C. in C++, in Pascal, in Modula2 (chi se lo ricorda?), in Fortran, ecc.
Una volta che sai programmare, imparare un nuovo linguaggio e' "solo" questione di studiarsi un libro.
Concordo,

prima dell'informatica creavo
apparecchi elettronici industriali in
TTL, CMOS ... con chip AND, OR ecc.
dominando la loro logica,
no problems a passare a sh, awk, C ...
AND == &&, OR == || in C

Avatar utente
Vito
Staff
Staff
Messaggi: 4182
Iscritto il: mar 5 dic 2006, 17:28
Nome Cognome: Vito
Desktop: MacOS
Località: Monaco (DE)
Contatta:

Re: imparare l'assembly

Messaggio da Vito »

Mario Vanoni ha scritto:
robbybby ha scritto:L'imparare a programmare e', sostanzialmente, indipendente dal linguaggio usato. Si puo' imparare a programmare in C. in C++, in Pascal, in Modula2 (chi se lo ricorda?), in Fortran, ecc.
Una volta che sai programmare, imparare un nuovo linguaggio e' "solo" questione di studiarsi un libro.
Concordo,

prima dell'informatica creavo
apparecchi elettronici industriali in
TTL, CMOS ... con chip AND, OR ecc.
dominando la loro logica,
no problems a passare a sh, awk, C ...
AND == &&, OR == || in C
E fin qui ci troviamo tutti...però secondo me il linguaggio assemblativo è un po' una mosca bianca;nel senso che uno deve capire la logica del linguaggio a basso livello:la tecnica di indirizzamento,i registri macchina....personalmente non ho ancora studiato l'assembler su architetture specificho,ma ho studiato un "linguaggio assemblativo" molto generale (un po' come era il pascal-like per i linguaggi ad alto livello) che mi è stato molto utile nel capire gli schemi dei cicli,i sottoprogrammi,i puntatori ecc ecc.... :D
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]

Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar 2 gen 2007, 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Re: imparare l'assembly

Messaggio da Blizzard »

ciao,
in mia modesta opinione imparare l'assembly (attenzione Vito che l'assembler è il compilatore, non il linguaggio) è una cosa ottima ma è totalmente errato partire dall'assembly per arrivare ad un linguaggio di alto livello a meno di non pensare come in un linguaggio di alto livello.

L'assembly è tremendamente formativo circa la programmazione ponderata in cui il programmatore deve fare i conti con parecchie limitazioni ma è anche vero che in assembly c'è un largo uso di salti ad esempio che a mio avviso entrano prima o poi nella logica del programmatore.
Così quando ci si scontra con la legge della località in cui i salti (anche i break; in un for) sono sconvenienti ci potrebbero essere dei problemi.

L'esperienza personale che vi porto è di quando passai dal commodore 64 in cui utilizzavo parecchie GOTO a quando passai al C in cui (fortunatamente) non conoscevo la goto label; e avevo difficoltà a dare un for(int i=0; i<100 && !trovato; i++)

Inoltre la diffusione dell'assembly è nettamente in calo anche per driver e dispositivi vari in cui solo alcune funzioni cruciali sono sviluppate in linguaggio assemblativo.

Posso dirti che fare un fibonacci in assembly è stata una delle cose più divertenti che mi sia mai capitata. Ma lo apprenderei solo dopo aver consolidato basi di buona programmazione che ti agevoleranno in futuro. Tutto qui.

Gio

Avatar utente
Vito
Staff
Staff
Messaggi: 4182
Iscritto il: mar 5 dic 2006, 17:28
Nome Cognome: Vito
Desktop: MacOS
Località: Monaco (DE)
Contatta:

Re: imparare l'assembly

Messaggio da Vito »

Blizzard ha scritto:(attenzione Vito che l'assembler è il compilatore, non il linguaggio)
Scusa Giovanni..spesso scrivo assembler riferendomi all'assembly... :D
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]

Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar 2 gen 2007, 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Re: imparare l'assembly

Messaggio da Blizzard »

lo facevo anch'io e lo fanno un numero tremendamente vasto di persone. Per questo ho puntualizzato :D

Avatar utente
m0rdr3d
Linux 2.x
Linux 2.x
Messaggi: 404
Iscritto il: dom 24 dic 2006, 13:40
Slackware: Slackware64-current
Kernel: 3.4.*
Desktop: KDE 4.8.2

Re: imparare l'assembly

Messaggio da m0rdr3d »

Blizzard ha scritto:lo facevo anch'io e lo fanno un numero tremendamente vasto di persone. Per questo ho puntualizzato :D
Lo faceva anche la mia docente di informatica di base all'università :doubt:
robbybby ha scritto:L'imparare a programmare e', sostanzialmente, indipendente dal linguaggio usato.
Concordo, ma mi permetterei solo di modificare in
imparare a programmare secondo un paradigma di programmazione è, sostanzialmente, indipendente dal linguaggio usato

Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar 2 gen 2007, 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Re: imparare l'assembly

Messaggio da Blizzard »

imparare a programmare secondo un paradigma di programmazione è, sostanzialmente, indipendente dal linguaggio usato
Concordo e quoto!
Diversi paradigmi stabiliscono anche diversi modi di pensare.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: imparare l'assembly

Messaggio da Mario Vanoni »

Blizzard ha scritto:
imparare a programmare secondo un paradigma di programmazione è, sostanzialmente, indipendente dal linguaggio usato
Concordo e quoto!
Diversi paradigmi stabiliscono anche diversi modi di pensare.
Usare un calcolatore RPN o algebrico,
il modo e` diverso, ma la matematica?

Avatar utente
m0rdr3d
Linux 2.x
Linux 2.x
Messaggi: 404
Iscritto il: dom 24 dic 2006, 13:40
Slackware: Slackware64-current
Kernel: 3.4.*
Desktop: KDE 4.8.2

Re: imparare l'assembly

Messaggio da m0rdr3d »

Il nodo della questione stà (IMHO) nell'espressività di un linguaggio.
È chiaro che a tempo di esecuzione tutto viene trasformato in 'semplice' linguaggio macchina, ma se per calcolare una radice quadrata ci vuole una riga di codice piuttosto che 300 la differenza c'è.

Passare da un paradigma imperativo ad uno ad oggetti cambia il modo di pensare e di vedere il programma in astratto.
Passare poi al paradigma funzionale è un'altro bel divertimento.
Certo, poi il calcolatore capisce sempre 0 e 1, ma per fare cose diverse sono necessari modi di pensare diversi.
Senza dubbio pensare ad un programma in assembly produce un codice -se corretto- più performante, ma il rapporto risultato/tempo impiegato?

Secondo questo punto di vista è diverso (e non poco) imparare un paradigma piuttosto che un altro.

Spero di aver correttamente interpretato e di non essere andato offtopic...

Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar 2 gen 2007, 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Re: imparare l'assembly

Messaggio da Blizzard »

Mario Vanoni ha scritto:
Blizzard ha scritto:
imparare a programmare secondo un paradigma di programmazione è, sostanzialmente, indipendente dal linguaggio usato
Concordo e quoto!
Diversi paradigmi stabiliscono anche diversi modi di pensare.
Usare un calcolatore RPN o algebrico,
il modo e` diverso, ma la matematica?
La matematica è uguale come lo è la legge fondamentale che un algoritmo è un insieme finito di passi per risolvere un determinato problema.
È la programmazione dell'algoritmo che è comunque differente da paradigma a paradigma.
Per fare un esempio in C mi concentro a scrivere un sistema basato su dati identificati come strutture e funzioni che elaborano istanze delle strutture.
In C++ ho una visione per classi del mio progetto. Subentra l'ereditarietà e il polimorfismo. Nell'ottica di tutte le fasi di progettazione, sviluppo e mantenimento del software non mi basta più identificare i dati del problema come semplici blocchi ma devo pensare al dominio di appartenenza di questi blocchi e a creare magari classi virtuali che definiscono l'interfaccia di elaborazione di un grande dominio in cui implementerò i sottodomini.
In assembly ho un concetto ancora diverso. Penso che devo definire blocchi e costanti in determinate aree (.text ad esempio). I dati da elaborare devono essere necessariamente memorizzati in registri. La mia memoria è identificata come uno stack che non ha accesso casuale ma solo push e pop. Il mio programma non è formato ne da classi ne da dati+funzioni ma da unico_blocco_di_codice+stack+registri. Le procedure stesse sono solo un escamotage fatto con le label e i jump.

Ora nella progettazione di un software java, non posso pormi dinanzi un editor con lo stesso "algoritmo mentale" che utilizzerei per scrivere lo stesso software in C. È sconveniente.

Quello che dico non è lascia perdere l'assembly. Ma non studiare l'assembly con la speranza di avere un apprendimento facile del C perchè sono due metodi di pensare totalmente differenti.
Se scrivi codice C pensando come l'assembly *potrebbe* venire fuori un software decisamente mal programmato.
Stesso discorso per quelli che pensano che una volta che è stata fatta una scorpacciata di C si può passare in maniera indolore sul C++ quando pure Stroustrup ci tiene a dire che sono due linguaggi differenti.

Gio

Avatar utente
Vito
Staff
Staff
Messaggi: 4182
Iscritto il: mar 5 dic 2006, 17:28
Nome Cognome: Vito
Desktop: MacOS
Località: Monaco (DE)
Contatta:

Re: imparare l'assembly

Messaggio da Vito »

Il modo di programmare è completamente diverso;però per esperienza personale vi dico il funzionamento dei puntatori in C l'ho capito al volo grazie alla conoscenza delle diverse tecniche di indirizzamento.
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]

zxzxasas
Linux 2.x
Linux 2.x
Messaggi: 397
Iscritto il: sab 15 nov 2008, 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Re: imparare l'assembly

Messaggio da zxzxasas »

Vito ha scritto:Il modo di programmare è completamente diverso;però per esperienza personale vi dico il funzionamento dei puntatori in C l'ho capito al volo grazie alla conoscenza delle diverse tecniche di indirizzamento.
Sai credo che è successo anche a me così...
Ma nel senso che ho capito cos' era un puntatore e cosa succedeva a livello hardware (avendo studiato l' assembly in un corso di calcolatori elettronici)...ma per quanto riguarda la programmazione, non è che sono migliorato...

Avatar utente
Vito
Staff
Staff
Messaggi: 4182
Iscritto il: mar 5 dic 2006, 17:28
Nome Cognome: Vito
Desktop: MacOS
Località: Monaco (DE)
Contatta:

Re: imparare l'assembly

Messaggio da Vito »

zxzxasas ha scritto: Sai credo che è successo anche a me così...
Ma nel senso che ho capito cos' era un puntatore e cosa succedeva a livello hardware (avendo studiato l' assembly in un corso di calcolatori elettronici)...ma per quanto riguarda la programmazione, non è che sono migliorato...
Ecco...io intendevo quello :)
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]

Rispondi