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.
Avatar utente
inux
Packager
Packager
Messaggi: 529
Iscritto il: sab 3 nov 2007, 11:36
Nome Cognome: Christian Reguzzoni
Slackware: 64 13.1
Desktop: kde
Località: busto arsizio (VA)

imparare l'assembly

Messaggio da inux »

ciao, vi volevo chiedere delle cose riguardo l'assembly.
Vorrei impararlo, ho un libro più una guida in internet tutto 8086 funziona su linux?
Ho letto che imparando prima l'assembly si è avvantaggiati poi con gli altri linguaggi di programmazione a alto livello come il C (quello che poi a me interessa), è vero? Voi che ne dite? Il c non l'ho ancora imparato a fondo sono alle basi è troppo azzardato? O comunque posso prima imparare l'assembly par poi tornare al c e approfondirlo? Grazie ciao. :-k

Avatar utente
kasher
Linux 1.x
Linux 1.x
Messaggi: 175
Iscritto il: gio 20 gen 2005, 0:00
Slackware: 12.2
Kernel: 2.6.27.7
Desktop: kde 3.5.10

Re: imparare l'assembly

Messaggio da kasher »

puoi tranquillamente imparare un linguaggio ad alto livello senza conoscere l' assembly, sebbene l' assembly in alcune circostanze sia molto utile, nn è indispensabile, a meno che non si voglia creare applicazioni specifiche, e magari x un determinato hardware, e in questo caso bisogna ricordare che ogni archittettura ha un suo assembly. Inux vai tranquillo, impara direttamente il C, poi se più in la se hai un pò di voglia e necessità inizia con l' assembly.
Saluti kasher.

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 »

inux ha scritto:ciao, vi volevo chiedere delle cose riguardo l'assembly.
Vorrei impararlo, ho un libro più una guida in internet tutto 8086 funziona su linux?
Ho letto che imparando prima l'assembly si è avvantaggiati poi con gli altri linguaggi di programmazione a alto livello come il C (quello che poi a me interessa), è vero? Voi che ne dite? Il c non l'ho ancora imparato a fondo sono alle basi è troppo azzardato? O comunque posso prima imparare l'assembly par poi tornare al c e approfondirlo? Grazie ciao. :-k
No io non credo.
Ho studiato il C, poi l' assembly (per MIPS)...poi quando volevo tornare al C, mi son trovato talmente male...
volevo fare tutto a mano...usavo pochissime funzioni di libreria, mi fissavo a voler mettere le label...

Decisamente no...se posso dirti come la vedo io, i linguaggi a basso livello non hanno nulla a che vedere con i linguaggi ad alto livello.
Anzi, molte volte rischi solo di confonderti le idee.

Vic Steele
Linux 3.x
Linux 3.x
Messaggi: 534
Iscritto il: dom 27 apr 2008, 13:46
Nome Cognome: Luigi Caiazza
Slackware: current x86_64
Kernel: 3.0.0
Desktop: Fluxbox / KDE 4.7.0
Distribuzione: Fedora 15
Località: Potenza
Contatta:

Re: imparare l'assembly

Messaggio da Vic Steele »

Alla mia università stiamo imparando ad usarlo in coordinata al C++ e Fortran77 in un altro corso, per due architetture.
Lo facciamo al primo anno, senza teoricamente partire da altre conoscenze.
Credo che potresti benissimo impararlo, ma è meglio che studi prima altri linguaggi ed entri completamente nell'ottica del ragionamento di un programmatore, dato che l'Assembler lo richiama in modo particolare...

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 »

Vic Steele ha scritto:Alla mia università stiamo imparando ad usarlo in coordinata al C++ e Fortran77 in un altro corso, per due architetture.
Lo facciamo al primo anno, senza teoricamente partire da altre conoscenze.
Credo che potresti benissimo impararlo, ma è meglio che studi prima altri linguaggi ed entri completamente nell'ottica del ragionamento di un programmatore, dato che l'Assembler lo richiama in modo particolare...
Non so...non mi sembra che programmare in assembly possa aiutare a capire funzioni, procedure, strutture dati ecc...anzi, credo che ti abitui a programmare completamente senza usufruire dei potentissimi strumenti che i linguaggi ti mettono a disposizione.
Poi magari sarà stata una mia sensazione...

Avatar utente
lamarozzo
Linux 3.x
Linux 3.x
Messaggi: 732
Iscritto il: gio 14 lug 2005, 0:00
Desktop: xfce
Distribuzione: archlinux
Località: Roma

Re: imparare l'assembly

Messaggio da lamarozzo »

Dipende cosa vuoi fare con la programmazione. Il C secondo me ti dà tutte le basi di cui hai bisogno per imparare bene a programmare: da un lato ti espone in modo sufficientemente approfondito ai meccanismi di funzionamento vero e proprio dell'elaboratore, ma contemporaneamente di dà una notevole possibilità di astrazione. Con l'assembly (che però non so) sicuramente hai in mano tutti i dettagli ma l'astrazione te la scordi. Con altri linguaggi (C++, Python, ecc.) invece l'astrazione la fa da padrona e si va a perdere un po' il contatto con le basi.

Ma tutto dipende da quel che devi fari.

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 »

inux ha scritto:ciao, vi volevo chiedere delle cose riguardo l'assembly.
Vorrei impararlo, ho un libro più una guida in internet tutto 8086 funziona su linux?
Ho letto che imparando prima l'assembly si è avvantaggiati poi con gli altri linguaggi di programmazione a alto livello come il C (quello che poi a me interessa), è vero? Voi che ne dite? Il c non l'ho ancora imparato a fondo sono alle basi è troppo azzardato? O comunque posso prima imparare l'assembly par poi tornare al c e approfondirlo? Grazie ciao. :-k
ATTENTO

AT&T Syntax versus Intel Syntax

http://asm.sourceforge.net/articles/linasm.html

Avatar utente
robbybby
Linux 4.x
Linux 4.x
Messaggi: 1223
Iscritto il: sab 16 dic 2006, 10:48
Slackware: 13.1 / 64 bit
Kernel: 3.3.x
Desktop: KDE 4.4.5
Località: Fra Trantor e Terminus

Re: imparare l'assembly

Messaggio da robbybby »

I linguaggi ad alto livello e l'assembler sono, in genere, mondi abbastanza distinti, almeno fino a che si rimane nel mondo PC, workstation e simili. Si toccano quando si ha a che fare, per esempio, con hardware limitati, come con i microcontroller (per esempio i PIC).
In un programma, anche grande, tipo quelli che trovi in una tipica installazione WIndows, non so se nemmeno venga mai usato l'assembler (kernel a parte, chiaramente).

Io programmo sia in C/C++ che in assembler. Spesso e' chiaro quando preferire uno, o l'altro. A volte no. Mi e' capitato per, esempio, di dover scrivere un driver per un tastierino speciale, e l'ho fatto in assembler. Un po' di tempo dopo, mi e' ricapitato un altro driver per un tastierino simile al primo, ma non potevo riutilizzare il codice scritto per l'altro, perche' la matrice righe/colonne era completamente diversa: l'ho scritto in C, risparmiando tempo e fatica, rispetto al primo.
Essere abituato ai linguaggia ad alto livello mi porta, a volte, ad usarelo stesso paradigma anche in assembler. Per esempio, in assembler, quando posso, implemento le funzioni con uno stack frame completo, con passaggio dei parametri sullo stack, e variabili locali.
Mi capita di dover interfacciare hardware particolari (tipo schede I/O custom) con programmi scritti in C/C++, e scrivo parti in assembler che si interfacciano al C, e parti in C che si interfacciano all'assembler.

Avatar utente
inux
Packager
Packager
Messaggi: 529
Iscritto il: sab 3 nov 2007, 11:36
Nome Cognome: Christian Reguzzoni
Slackware: 64 13.1
Desktop: kde
Località: busto arsizio (VA)

Re: imparare l'assembly

Messaggio da inux »

Alla fine mi piace più l'assembly del C con questo non escludo di imparare il C la lingua madre di UNIX/LINUX

@ mario
Si l'ho sentito che cambiava leggermente dall'assembly intel bè io provo con quello normale poi vedo, grazie a tutti ciao.

Avatar utente
Plaoo
Linux 3.x
Linux 3.x
Messaggi: 809
Iscritto il: gio 10 apr 2008, 17:40
Slackware: 14 64
Kernel: 3.2.9
Desktop: KDE
Località: Ittiri (SS)

Re: imparare l'assembly

Messaggio da Plaoo »

Ho studiato qualche anno fà il linguaggio assembly, solo per passione, non sono andato molto lontano comunque una bella esperienza, adesso che uso linux avevo intenzione di riprenderlo unito al C assembly inline ma devo usare la sintassi AT&T diversa da quella che ho studiato e in più devo buttare un vecchio libro di Peter Norton perchè in ogni esempio è riferito a microsoft windows/dos quindi le chiamate agli interrupt sono diversi (ditemi se sbaglio). Se trovi qualche guida (anche cartacea) in italiano sulla programmazione assembly su linux fammi sapere. ciao.
Il canale ufficiale di slacky.eu si trova sui server irc.syrolnet.org canale #slackware

Vic Steele
Linux 3.x
Linux 3.x
Messaggi: 534
Iscritto il: dom 27 apr 2008, 13:46
Nome Cognome: Luigi Caiazza
Slackware: current x86_64
Kernel: 3.0.0
Desktop: Fluxbox / KDE 4.7.0
Distribuzione: Fedora 15
Località: Potenza
Contatta:

Re: imparare l'assembly

Messaggio da Vic Steele »

zxzxasas ha scritto:
Vic Steele ha scritto:Alla mia università stiamo imparando ad usarlo in coordinata al C++ e Fortran77 in un altro corso, per due architetture.
Lo facciamo al primo anno, senza teoricamente partire da altre conoscenze.
Credo che potresti benissimo impararlo, ma è meglio che studi prima altri linguaggi ed entri completamente nell'ottica del ragionamento di un programmatore, dato che l'Assembler lo richiama in modo particolare...
Non so...non mi sembra che programmare in assembly possa aiutare a capire funzioni, procedure, strutture dati ecc...anzi, credo che ti abitui a programmare completamente senza usufruire dei potentissimi strumenti che i linguaggi ti mettono a disposizione.
Poi magari sarà stata una mia sensazione...
A dire il vero, più che sotto quell'ottica, credo che il ragionare sul percorso di un singolo dato, dal trasporto dal buffer all'accumulatore, alla soluzione inversa per la produzione in output, alle chiamate delle aree di memoria, al riempimento dei registri, ecc., possa portarti vantaggi nel ragionare su come comportarti con determinati oggetti nei linguaggi di maggior livello, sia se ti vuoi fare un flowchart del sistema algoritmico che vuoi creare, sia anche per ottimizzare il più possibile l'impiego di risorse.
Poi magari sono ingenuo ed inesperto e non è così, con il tempo verificherò.

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 »

Su windows le applicazioni che hanno parti in assembly sono tantissime: i virus a esempio :D

@Vic Steele

Io ho programmato in assembly per RISC, ed essendo l' instructions set ridotto all' osso (parliamo di una 60ina di istruzioni contro le quasi 400 di un Cisc), magari non sarò attendibilissimo. Di fatto, l' assembly per Cisc l' ho usato solo per salvarmi degli indirizzi di ritorno in un codice C, 2 righe di codice imparate a memoria...ma appena ho tempo imparerò pure quello!

Ma più che capire benissimo la logica secondo cui un dato passa da una parte ad un' altra, a chi vuole imparare a programmare interessa programmare. Senza prenderci troppo in giro, di fatto, in assembly non si possono fare chissà quali grandi programmi o chissà quali grandi cose...ci sta un driver per un tastierino da 5 KB (comunque complessissimo, per carità), ma se già programmare una radice quadrata diventano 300 righe non darà poi tanti sbocchi nell' ambito degli applicativi, questo spero sia chiaro...

Poi non saprei...allocare lo spazio per una variabile diminuendo lo stack pointer anzichè dichiarsi la variabile, usare le label anzichè i cicli, fare degli algoritmi anzichè usare le funzioni di libreria, non avere dati strutturato...Insomma, io non credo che conoscere l' assembly aiuti a programmare in C.
Ricordo ancora che quando poi ripresi a programmare in C, leggevo int strcmp(char* v1,char* v2) è uguale a 0 se...auguale a 0 ma cosa? chi? quando? si perde la logica delle funzioni in effetti...in assembler queste cose non esistono, quando invece in C sono una delle cose più importanti per scrivere del codice in modo veloce, sicuro e funzionante...

Posso essere daccordo che aiuti a capire, in parte, i calcolatori, ma che serve per programmare in C non mi pare. Anzi, forse confonde solo le idee ad una persona inesperta. Le ottimizzazioni di cui parli, per quanto interessanti, restano comunque una fase avanzata e che comunque vengono considerate solo a grandi linee anche in progetti piuttosto seri. Fermorestando che tutti i calcoli sulle risorse possono essere approssimati anche con dei calcoli sul codice C.

Se poi si è affascinati dall' assembly (e come si fa a non esserlo mi chiedo a volte) è un' altra storia...

Vic Steele
Linux 3.x
Linux 3.x
Messaggi: 534
Iscritto il: dom 27 apr 2008, 13:46
Nome Cognome: Luigi Caiazza
Slackware: current x86_64
Kernel: 3.0.0
Desktop: Fluxbox / KDE 4.7.0
Distribuzione: Fedora 15
Località: Potenza
Contatta:

Re: imparare l'assembly

Messaggio da Vic Steele »

Non metto in dubbio niente di quello che hai scritto (anzi, già che conosci il RISC, significa che hai più esperienza di me), ma forse mi hai preso troppo alla lettera.
Tolto il fatto che un programmatore completo deve sapere anche queste cose, il mio discorso era più legato ad una questione di beneficio della concatenazione della conoscenza del viaggio dei dati con quella più "umana" dei valori che prendono il nome delle dichiarazioni che tu assegni.
Ma mi pare scontato che ci debba essere comunque un lavoro di mente dietro, non ho mai voluto parlare di automazione anche perchè se per imparare avessimo bisogno di automatizzarci saremmo più idioti di quanto già siamo :D .

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 »

Che poi in effetti, rileggendo il mio messaggio, per una persona che di programmazione non conosce nulla, è completamente indifferente.

Quindi penso di poter concordare con te che se si vogliono imparare i due linguaggi si può imparare prima l' assembly...
però che serva, non so quanto a dire il vero...

Avatar utente
robbybby
Linux 4.x
Linux 4.x
Messaggi: 1223
Iscritto il: sab 16 dic 2006, 10:48
Slackware: 13.1 / 64 bit
Kernel: 3.3.x
Desktop: KDE 4.4.5
Località: Fra Trantor e Terminus

Re: imparare l'assembly

Messaggio da robbybby »

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'.

Rispondi