Pagina 1 di 2

imparare l'assembly

Inviato: ven 2 gen 2009, 15:16
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

Re: imparare l'assembly

Inviato: ven 2 gen 2009, 15:30
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.

Re: imparare l'assembly

Inviato: ven 2 gen 2009, 15:42
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.

Re: imparare l'assembly

Inviato: ven 2 gen 2009, 15:44
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...

Re: imparare l'assembly

Inviato: ven 2 gen 2009, 15:57
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...

Re: imparare l'assembly

Inviato: ven 2 gen 2009, 16:21
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.

Re: imparare l'assembly

Inviato: ven 2 gen 2009, 16:59
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

Re: imparare l'assembly

Inviato: ven 2 gen 2009, 22:26
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.

Re: imparare l'assembly

Inviato: ven 2 gen 2009, 22:43
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.

Re: imparare l'assembly

Inviato: sab 3 gen 2009, 1:00
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.

Re: imparare l'assembly

Inviato: sab 3 gen 2009, 1:31
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ò.

Re: imparare l'assembly

Inviato: sab 3 gen 2009, 2:31
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...

Re: imparare l'assembly

Inviato: sab 3 gen 2009, 3:23
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 .

Re: imparare l'assembly

Inviato: sab 3 gen 2009, 3:29
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...

Re: imparare l'assembly

Inviato: sab 3 gen 2009, 15:13
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'.