Visualizza risultati del sondaggio: E' importante studiare assembler?

Partecipanti
10. Non puoi votare in questo sondaggio
  • Si

    3 30.00%
  • No

    5 50.00%
  • Non sò

    2 20.00%
Visualizzazione risultati 1 fino 27 di 27

Discussione: Studiare assembler, ne vale la pena?

  1. #1
    Guest

    Smile Studiare assembler, ne vale la pena?

    Voglio proporvi la stessa domanda che mi ha fatto qualcuno tempo fa su qesto forum tramite un messaggio privato:
    La domanda era:
    [...]Secondo te vale la pena di imparare l'assembly ???[...]
    Io ho risposto:
    Ciao, rispondo con piacere al tuo messaggio:
    [...] Secondo me è importante studiare l'assembler perchè solo cosi si capisce come funziona un elaboratore (o se proprio vogliamo essere precisi un processore) si ha il pieno controllo della macchina e viene allenata la mente del "programmatore" cosi c'è quando si troverà a lavorare in un lingaggio ad alto livello come il C saprà risolvere i problemi con più facilità.
    E' un pò come studiare matematica apparentemente non serve a niente ma poi grazie ad essa possiamo risolvere molti problemi.
    Secondo me siamo arrivati ai linguaggi ad alto livello perchè con essi si sono risolti tanti problemi SEMPLIFICANDO l'attività di programmazione così il programmatore può pensare alla risoluzione di problemi più complesso. Cosa non fattibile in assembler che già per visualizzare un numero a più cifre devi fare un casono! Quindi studiando l'assembler puoi capire in realtà cosa fà il processore invece studiando il C no!
    Spero di non sbagliarmi, di aver risposto bene
    Ciao
    Siete d'accordo? Voi come avreste risposto?
    Sbizzarritevi.
    Ciao

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,270

    Predefinito

    Citazione Originalmente inviato da atterzolivello Visualizza messaggio
    qualcuno
    {}

    Con il C per fare certe cose, ci si bada molto poco rispetto all'assembly...

    Comunque l'assembly 'ancora' non l'ho iniziato, visto che a scuola non si fa più, lo studierò più avanti!

    CIAO!
    Ultima modifica di alemoppo : 08-03-2009 alle ore 17.49.53

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    {}

    Con il C per fare certe cose, ci si bada molto poco rispetto all'assembly...

    Comunque l'assembly 'ancora' non l'ho iniziato, visto che a scuola non si fa più, lo studierò più avanti!

    CIAO!
    Si "qualcuno"
    Volevo porre la domanda anchè agli altri Altervistiani.
    Ciao

    EDIT:
    Ovvio che se ne tiene poco conto...
    basta pensare che le seguenti righe di codice c:
    A = A+B;
    nell'assembly dell'8086, a 16 bit, che conosco io si traduce cosi: (suppongo A e B dichiarate di tipo Word)
    mov ax,b
    add b,ax
    Questo perchè la sintassi dell'operazione add prevede che destinazione e sorgente non facciano riferimento alla stessa memoria (non possono essere entrabi registri o variabili) e non possono essere costanti (almeno destinazione non può esserlo... non ricordo se sorgente si...)
    Un casino vero?
    Per non parlare della DIV e della MUL

    Un'altra cosa: a differenza dei linguaggi strutturati o ad oggetti in assebly hai l'opportunita di crearti da solo le strutture di controllo
    IF FOR DO-WHILE, WHILE.... cosa molto interessante
    cosi capisci come funsiona
    :-)
    :-)
    Ultima modifica di atterzolivello : 08-03-2009 alle ore 18.11.31 Motivo: Dimenticato il ; in A= A+B; ERRORE GRAVE!

  4. #4
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Assembly, non assembler, che è invece il compilatore.
    viene allenata la mente del "programmatore" cosi c'è quando si troverà a lavorare in un lingaggio ad alto livello saprà risolvere i problemi con più facilità.
    Dici?
    Allora studio l'assembly, così dopo aver studiato mesi MOV, INT, LEA, ... e i vari registri saprò programmare bene il mio processore a basso livello ed imparare la filosofia OOP sarà proprio un giochetto da ragazzi
    ad alto livello come il C
    Migliore esempio non potevi scegliere, essendo C il linguaggio a più basso livello tra quelli low-level

    Assembly è assolutamente inutile imho (almeno nell'uso quotidiano), a meno che non si debba interagire direttamente con l'hardware, scrivere un compilatore, o in applicazioni dove è necessario ottenere il massimo delle performance.

    E pensare che ho letto in giro pure qualche pazzo che consigliava esplicitamente assembly come linguaggio per iniziare

    Ciao!
    Ultima modifica di programmazioned : 08-03-2009 alle ore 18.48.51

  5. #5
    Guest

    Predefinito

    Non consiglio l'assembly come linguaggio da cui iniziare e poi se vuoi l'esempio te lo posso fare in java:
    A = A+B;
    Poi dipende dai pundi di vista... so che in assembly la struttura if te la devi fare da solo e in C O IN JAVA puoi scrivere
    if(...){
    ...
    }
    e poi il C è considerato a basso livelo sol perchè permette di passare i parametri alle funzioni per referenza (cioè per indirizzo) oltre che per valore come fa il java.
    E forse anche perchè è possibile fare:
    asm{
    //codice assembly compatibile con il compilatore C chè hai
    }
    Dammi qalche altro motivo per il quale dovrei considerare un linguaggio di programmazione strutturata AD ALTO LIVELLO quale il C un linguaggio a basso livello.

    EDIT:
    Ovvio chè programmare in assembly non è cosa da fare tutti i giorni.
    Comunque ogniuno la pensa come vuole
    CIAO a tutti
    Ultima modifica di atterzolivello : 08-03-2009 alle ore 18.30.07

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,270

    Predefinito

    Citazione Originalmente inviato da programmazioned Visualizza messaggio
    E pensare che ho letto in giro pure qualche pazzo che consigliava esplicitamente assembly come linguaggio per iniziare

  7. #7
    Guest

    Predefinito

    per cominciare, l'assembly?? meglio il pascal!!

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da tryphpnuke Visualizza messaggio
    per cominciare, l'assembly?? meglio il pascal!!
    Chè pascal? Non lo usa più nessuno, neanche nelle peggio scuole...
    Moolto meglio IL C per cominciare!
    E poi puoi inserirci moduli assembly... devi vedere che bei programmini mi escono con il C\Assembly...

  9. #9
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Non ho mai considerato C a basso livello, ho solo detto che è quello a più basso livello tra quelli ad alto livello, perchè permette il controllo delle operazioni di memoria a basso livello e integra funzioni che mi sembrano abbastanza da low-level :)

    Il passaggio per referenza poi non esiste soltanto in C, ma in tutti o quasi i linguaggi di programmazione procedurali...per esempio in php esiste l' operatore & o in vb.net la keyword ByRef.

    so che in assembly la struttura if te la devi fare da solo e in C O IN JAVA puoi scrivere
    Sì, ma l'utilità di fare questa cosa nel pratico secondo te qual'è? Scopo didattico forse (già scritto sopra, capire come funziona e scrivere un compilatore), ma non ci vedo nient'altro...:S

    Comunque, letto l'ultimo tuo post, spero non ti sia offeso perchè ho criticato il tuo punto di vista.

    Ciao!
    Ultima modifica di programmazioned : 08-03-2009 alle ore 18.46.15

  10. #10
    Guest

    Predefinito

    No non sono offeso...

  11. #11
    Guest

    Predefinito

    pascal non lo usa nessuno?? ma cosa dici!? fino a qualche versione fa il kernel di debian aveva ancora qualche cosa fatta in pascal..!

  12. #12
    Guest

    Predefinito

    Si? Non lo sapevo... a me avevano detto che era usato solo per scopi didattici (nelle scuole)... e poi il kernel liunx non è fatto in C?

  13. #13
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Pascal? naaaaa :D
    Perchè cominciare da quello? Ha sì una sintassi didattica, è simile al C come potenzialità, ma oggi nel pratico è obsoleto, almeno imho.
    A questo punto preferirei il delphi o al limite l'Objective Pascal :)
    Il kernel di Debian cos'è ??
    Io al massimo conoscevo il kernel Linux, scritto in C da sempre.
    E comunque "fino a qualche versione fa", appunto...
    Ciao!
    Ultima modifica di programmazioned : 08-03-2009 alle ore 18.48.35

  14. #14
    Guest

    Predefinito

    e va be'..!
    cmq pascal è molto semplice, e chi deve imparare acquisisce subito il meccanismo logico necessario a programmare.. solo la sintassi è un po' restrittiva, per il resto è ancora ottimo..
    certo: il passo successivo è la programmazione ad oggetti, ma con le buone basi che ti ha dato il pascal ti puoi lanciare direttamente nel java..

    [ps] il kernel è fatto in c, quando il c lo puoi usare.. quando non esisteva, dovevano farlo in qualche altro modo, evidentemente. anche il kernel usato dai primi os machintosh era fatto col pascal (anche il TeX), proprio perché -a suo tempo- era uno dei linguaggi più adatti per farlo.
    [ps2] ok: il kernel linux usato da debian (io conosco questa versione, le altre le ho sempre snobbate malamente..! )
    Ultima modifica di tryphpnuke : 08-03-2009 alle ore 18.52.13

  15. #15
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,270

    Predefinito

    Io ho iniziato a programm... a scrivere qualcosa con il C e mi sono trovato MOLTO BENE!{consiglio a tutti di iniziare con il C}
    Poi adesso sto dando un occhiatina al Java, JS e PHP

  16. #16
    Guest

    Predefinito

    boh: io ho cominciato con php e javascript, e avevo i miei problemucci. il pascal me li ha chiariti praticamente tutti, tanto che adesso, con il java, non ho minimamente problemi..

  17. #17
    Guest

    Talking

    Citazione Originalmente inviato da tryphpnuke Visualizza messaggio
    e va be'..!
    cmq pascal è molto semplice, e chi deve imparare acquisisce subito il meccanismo logico necessario a programmare.. solo la sintassi è un po' restrittiva, per il resto è ancora ottimo..
    certo: il passo successivo è la programmazione ad oggetti, ma con le buone basi che ti ha dato il pascal ti puoi lanciare direttamente nel java..

    [ps] il kernel è fatto in c, quando il c lo puoi usare.. quando non esisteva, dovevano farlo in qualche altro modo, evidentemente. anche il kernel usato dai primi os machintosh era fatto col pascal (anche il TeX), proprio perché -a suo tempo- era uno dei linguaggi più adatti per farlo.
    [ps2] ok: il kernel linux usato da debian (io conosco questa versione, le altre le ho sempre snobbate malamente..! )
    La prima versione del DOS era in assembly poi unix è stato introdotto assieme al C (hanno fatto il C per fare unix) e poi è nato linux e altri SO unix-like come il MAC OSX
    :-)
    Io sono passato dal C al java (sono all'inizi del java però) e mi trovo egualmente bene avendo fatto il mix C\java\assembly

  18. #18
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    cmq pascal è molto semplice, e chi deve imparare acquisisce subito il meccanismo logico necessario a programmare.. solo la sintassi è un po' restrittiva, per il resto è ancora ottimo..
    Sì su questo sono d'accordo, infatti offre le stesse potenzialità del C ma più semplicità :)
    Ma oggi imho è necessario programmare ad oggetti.
    Quindi Delphi o Objective Pascal per chi proviene da Pascal; C++ o Objective C per chi prima scriveva in C.
    Poi perchè dici che il passaggio Pascal - Java sia così semplice? :S
    Sono due linguaggi completamenti diversi :S
    EDIT:
    boh: io ho cominciato con php e javascript, e avevo i miei problemucci. il pascal me li ha chiariti praticamente tutti, tanto che adesso, con il java, non ho minimamente problemi..
    Forse perchè sei passato da linguaggi di scripting e per il web a linguaggi di programmazione desktop compilati/pseudocompilati :)
    Riguardo il linguaggio con cui cominciare, mi sento di consigliare decisamente Python: sintassi semplice, grandi potenzialità, OOP.
    Comunque stiamo andando parecchio OT...
    Ciao!
    Ultima modifica di programmazioned : 08-03-2009 alle ore 20.21.53

  19. #19
    Guest

    Predefinito

    Precisiamo il java è un linguaggio "pseudocompilato" e anche MA soprattutto interpetrato
    dalla JVM per questo non vedo a cosa centri con l'assembly e come fà a capire uno come funsiona il processore partendo dal java.

    Per concludere possiamo dire che l'assembly è importante se uno vuole capire il modo che hà l'8086 di gestire la memoria.... O per alcune applicazioni tecniche (dai non ditemi che nessuno lo usa per lavorare...).

    Per imparare a programmare è opportuno partire dal C o da un qualsiasi linguaggio di programmazione strutturata (io consiglio il C) perchè da li si è partiti per arrivare alla OOP. Dalla OOP poi uno scegle di specializzarsi in programmazione di rete o quant'altro e imparare i linguaggi di scripting e l'HTML.
    Ovvio che se uno vuole fare il programmatore di sistema deve sapere l'assembly e un linguaggio tipo il C.


    :-)
    Ultima modifica di atterzolivello : 08-03-2009 alle ore 19.26.04

  20. #20
    Guest

    Predefinito

    Secondo me dipende. Se sei un informatico è difficile che sviluppi un'applicazione da far girare su un pc in assembly.
    Mentre per me, che sono un ingegnere elettronico, assembly è importantissimo assieme al VHDL.
    Fare un programma che giri su un microcontrollore come i PIC usando il C si può fare, ma risulterà sicuramente più lento e più esoso in termini di risorse di un programma che faccia le stesse cose scritto in assembly.
    In campo industriale vi assicuro che i microcontrollori sono molto utilizzati e saperli programmare ad hoc è importantissimo.

  21. #21
    Guest

    Predefinito

    Tu dici?
    Compila ed esegui questo:
    E' un programma C con inplementazione di moduli assembler le operazioni di I/O (per facilitare il programmatore) sono fatte in C mentre le operazioni aritmetico/logiche in assembler Cosi l'esecuzione del programma risulta più veloce.
    Il seguente prende in Input un numero decimale intero a 16 bit e lo converte in binario la conversione viene fatta in assembler e questo risulta più veloce (non tanto ora con i processori a 64 bit e 12 giga di ram) ma su macchine MOLTO meno potenti come dicevi tu lo è.
    #include<stdio.h>
    main(){
    int a;
    clrscr();
    /*Aquisizione del valore numerico*/
    chiedi:
    printf("\nInserisci il valore da convertire in binario:\n");
    scanf("%d", &a);
    asm{
    cmp a,32768
    je chiedi
    }
    printf("Il corrispondente valore binario e'\n");
    asm{
    mov bx,a
    mov cx,0010h
    }

    asm{mov dl,00h
    rcl bx,1h
    adc dl,'0'
    mov ah,02h
    int 21h
    loop Ciclo
    }
    messaggio:
    printf("\ncontinuare? s/n");
    asm{
    mov ah,01h
    int 21h
    cmp al,'s'
    je chiedi
    cmp al,'n'
    jne messaggio
    jmp fine
    }
    fine:
    printf("\nHai premuto n,CIAO!\n");
    getch();
    return 0;
    }
    Mi esonero dal commentare il listato!
    :-)

    EDIT:
    Ovvio che se lo vuoi compilare devi usare un compilatore C che usa la sintassi intel e a 16 bit quale il Turbo C

    Come puoi notare ho fatto un'applicazione da far girare sul PC e se invece del C avessi usato il C++ (tanto anche esso supporta l'inserimento di moduli assembler) con le sue GUI avrei creato un programma con interfaccia grafica e non a caratteri.
    Ultima modifica di atterzolivello : 08-03-2009 alle ore 20.06.30 Motivo: Si scrive I/O non IO, errore gravissimo!

  22. #22
    Guest

    Predefinito

    Io come linguaggio da programmatore conosco solo il PHP e qualcosa di JS! xD
    E vado bene così..ho qualche problemuccio si...ma me la cavo! ç_ç
    Ciauu! ;D

  23. #23
    Guest

    Predefinito

    sIM... chè dire... qualche problemuccio in PROGRAMMAZIONE e in nient'altro, lo teniamo tutti compreso io
    :-)

  24. #24
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Precisiamo il java è un linguaggio "pseudocompilato" e anche MA soprattutto interpetrato
    dalla JVM per questo non vedo a cosa centri con l'assembly e come fà a capire uno come funsiona il processore partendo dal java.
    A parlare di java ci sei arrivato tu e nessuno ha mai parlato di java come uno strumento per programmare in basso livello :S
    Per concludere possiamo dire che l'assembly è importante se uno vuole capire il modo che hà l'8086 di gestire la memoria....
    Non solo...
    Per imparare a programmare è opportuno partire dal C o da un qualsiasi linguaggio di programmazione strutturata (io consiglio il C) perchè da li si è partiti per arrivare alla OOP.
    Non sono d'accordo, si può partire tranquillamente da linguaggi completamente orientati agli oggetti, vedi Java o Python.
    Dalla OOP poi uno scegle di specializzarsi in programmazione di rete o quant'altro e imparare i linguaggi di scripting e l'HTML.
    Chi dice che questo sia il percorso corretto?
    Io sono partito dai linguaggi di markup ([x]html, css) per arrivare poi a quelli di scripting (php, python, javascript) e alla fine ai linguaggi di programmazione (c++, java, pascal, c# & vb.net).
    Ovvio che se uno vuole fare il programmatore di sistema deve sapere l'assembly e un linguaggio tipo il C.
    Cosa intendi con "programmatore di sistema"?
    Il sistemista deve conoscere la bash e qualche linguaggio di scripting che io sappia :S
    MA PER QUESTO LO CONSIDERATE A BASSO LIVELLO?
    Ma sei di coccio?
    Rileggiti il thread da capo!
    Ultima modifica di programmazioned : 08-03-2009 alle ore 20.06.47

  25. #25
    Guest

    Predefinito

    Non mi va di rileggero...
    per interfaccia a caratteri intendo quella a linea di comando...
    per capirci...
    fai start>Esegui e poi CMD
    :-)
    Per programmazione di sistema intendo fare applicazioni per il so o il so stesso.
    E poi uno fa il percorso che li pare a seconda di quello che gli interessa e a seconda (se ci và) di quello che gli presentano alla scuola di informatica/elettronica.
    Ciao

  26. #26
    Guest

    Predefinito

    Citazione Originalmente inviato da atterzolivello Visualizza messaggio
    Tu dici?
    Compila ed esegui questo:
    E' un programma C con inplementazione di moduli assembler le operazioni di I/O (per facilitare il programmatore) sono fatte in C mentre le operazioni aritmetico/logiche in assembler Cosi l'esecuzione del programma risulta più veloce.
    Il seguente prende in Input un numero decimale intero a 16 bit e lo converte in binario la conversione viene fatta in assembler e questo risulta più veloce (non tanto ora con i processori a 64 bit e 12 giga di ram) ma su macchine MOLTO meno potenti come dicevi tu lo è.

    Mi esonero dal commentare il listato!
    :-)

    EDIT:
    Ovvio che se lo vuoi compilare devi usare un compilatore C che usa la sintassi intel e a 16 bit quale il Turbo C

    Come puoi notare ho fatto un'applicazione da far girare sul PC e se invece del C avessi usato il C++ (tanto anche esso supporta l'inserimento di moduli assembler MA PER QUESTO LO CONSIDERATE A BASSO LIVELLO?) con le sue GUI avrei creato un programma con interfaccia grafica e non a caratteri.
    In parte mi hai dato ragione, per ottimizzare quel programma non puoi fare a meno di usare l'assembly. è vero che con gli attuali processori cambia poco, ma quando progetti un circuito di controllo con PIC o altri microcontrollori, cerchi di usare i più economici e di ottimizzarli al massimo.
    Se hai solo qualche K di memoria devi cercare di scrivere il minor numero di funzioni, se programmi un pic col C quando poi vai a compilare il microcontrollore sicuramente andrai a occupare più memoria rispetto a scrivere in assembly e poi compilare.

    Io volevo dire che secondo me a scopo pratico l'assembly serve solo se si progettano circuiti elettroni di controllo o interfacce "elementari", dove devi cercare di spendere il meno possibile per realizzare l'interfaccia o il controllo di una macchina. Se si vuole progettare qualcosa di + sofisticato, si può benissimo fare tutto in C e usare un microprocessore.

  27. #27
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Non mi va di rileggero...
    per interfaccia a caratteri intendo quella a linea di comando...
    per capirci...
    fai start>Esegui e poi CMD
    :-)
    Sono su Linux quindi non va
    Scherzi a parte, ho cancellato quella parte del messaggio precedente.
    Non sapevo che interfaccia "a caratteri" fosse un termine corretto, mi scuso.
    Per programmazione di sistema intendo fare applicazioni per il so o il so stesso.
    Ah, ok :)
    Comunque quoto vivalataverna ed esco dal lungo OT.
    Ciao!
    Ultima modifica di programmazioned : 08-03-2009 alle ore 20.15.55

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •