COME INIZIARE

di il
21 risposte

COME INIZIARE

Salve, non avendo trovato altri 3d ne ho fatto uno io. Spero di essere nella sezione giusta...
Ho appena finito il corso di architetture durante il quale abbiamo fatto un accenno alla programmazione assembly ( o assembler...) in particolare in combinazione con il C usando _asm in visual studio ma non mi ha soddisfatto visto che ritengo questo tipo di programmazione affascinante. Allora volevo iniziare da solo a studiarmi qualche manuale. Ma non so da dove incominciare. Mi potreste consigliare un IDE (ho visto che in visual studio 2010 si puo assembare un file .asm ma non so come si faccia) Ho scaricato TASM ma anche con quello non sono stato in grado di fare niente...
Insomma se gentilmente potreste darmi un punto di inizio vi sarei grato.
PS. ho gia goglato di tutto, se ho fatto questa domanda è perche è 3/4 giorni che cerco ma non trovo niente (forse cerco male io).
Grazie mille!

21 Risposte

  • Re: COME INIZIARE

    Allora, c'e' la strada difficile e quella complicata.

    La strada difficile e' quella di studiare direttamente l'assembler.
    Personalmente te lo sconsiglio: fondamentalmente non ne vale la pena.
    Mooooolto difficilmente ti capitera' di scrivere direttamente in assembler.

    Poi c'e' la strada compliata, ma decisamente piu' interessante.

    Partendo dall'idea generale che non ti capitera' mai scrivere un'intera applicazione direttamente in assembler, ma al piu' qualche funzioncina, l'idea spicciola e' quella di utilizzare un linguaggio ad alto livello che permetta l'inserimento inline di codice assembler.

    E la soluzione e' .... rullo di tamburi .... C/C++ ... applausi, prego

    Esattamente come hai visto .

    Quasi tutti i compilatori C/C++ permettono di inserire codice assembler direttamente inline.
    Quasi vuol dire che Visual Studio lo permette solo per applicazioni a 32 bit, ma non a 64 bit. Chissa' perche', visto che piu' o meno per l'assembler ci deve passare!

    Il compilatore GNU, invece, non ha di queste limitazioni.

    A suo tempo, il compilatore Borland C++ permetteva di scrivere l'assembler direttamente come se fosse un pezzo di programma, con tanto di controllo sintattico. Bei tempi.

    Invece i compilatori attuali vedono la parte in assembler come qualcosa da inserire nel loro assembler, cioe' quello generato dalla compilazione del sorgente C, e quindi poi convertito in codice macchina. Si perde, cosi' il controllo sintattico, che verra' eseguito solo in fase di compilazione.

    Ma puoi fare anche di meglio: invece del codice assembler, puoi utilizzare le intrinsic functions che tutti i compilatori mettono a disposizione.

    Le intrinsic functions sono istruzioni assembler trasformate in classiche funzioni C. La parte intelligente e' che tu, da codice, le usi come se fossero delle normali funzioni, invece il compilator sa che sono funzioni assembler, che usano i registri, e quindi e' in grado di generare del codice che sfrutta i registri della CPU (che tu non vedi) in modo intelligente.

    Se spulci il post Compilatore GNU e istruzioni Intel SIMD (sezione C++) trovi un esempio di libreria C++ in cui c'e' sia del codice C++ standard, sia l'uso di intrinsic functions sia di codice assembler inline!

    Il codice scritto con le intrinsic functions e' performante quasi quanto quello in assembler. Si perde solo qualche %. Ma e' decisamente meno complicato da scrivere.

    Inoltre, ti risolvi anche una serie di rognette rognose: problemi di call convention (come si passano i parametri e come si ottiene il risultato), di come indirizzare le locazioni di memoria, (se sullo stack, nello heap, costanti, ecc.). Tutte cose che servono alla scrittura del codice, ma che possono essere delegate tranquillamente al compilatore.

    Come conseguenza di cio' puoi ridurre lo studio dell'assembler alle sole parti che effettivamente risultano interessanti.

    Oltre a questo, c'e', ovviamente, la documentazione Intel:

    https://software.intel.com/sites/landingpage/IntrinsicsGuide/

    http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf
  • Re: COME INIZIARE

    OK! Grazie mille veramente! Vorrà dire che mi metterò a studiare ahaha
  • Re: COME INIZIARE

    Puoi cominciare con Visual Studio (anche se a 32 bit dato che inizi ...) e i file .asm

    Con VS2010 uno scheletro di programma potrebbe essere
    
    .model flat, stdcall
    
    MessageBoxA PROTO near32 stdcall, window:dword, text:near32, windowtitle:near32, style:dword
    
    .stack 8192
    
    .data
    
    mess	db "Buongiorno !",0
    titolo	db "Il tuo programma assembly", 0
    
    .code
    
    main proc
    
    	invoke MessageBoxA, 0, near32 ptr mess, near32 ptr titolo, 0
    
    	ret
    
    main endp
    
    end main
    
  • Re: COME INIZIARE

    Ah ok ho provato anche così... Comunque quando vado a eseguirlo mi dice:
    "Unable to start program "C:\...\programma.exe"
    Impossibile trovare il file specificato"....
  • Re: COME INIZIARE

    Difficilmente ho scritto programmi assembly che poi ho usato in programmi distribuiti (se non in piccolissime parti) negli ultimi tempi. Sicuramente l'ho fatto tantissimo durante i bei tempi del Commodore 64 in cui tantissimo codice assembly risolveva un sacco di problemi.

    Nonostante questo, NON CONSIGLIEREI MAI di non studiare l'assembly per questo motivo.
    Non è importante che quello che si fa con il C possa bastare o meno, anche se non sai che con certi micro NON si poteva usare C ma solo assembly.

    La questione importante è che l'assembly è ESTREMAMENTE formativo e serve ad APRIRE LA MENTE dei programmatori e fornire loro elasticità nell'affrontare questioni legate alla programmazione, con qualsiasi linguaggio.
  • Re: COME INIZIARE

    Domandona di rito: in che modo dovrebbe aprire la mente?

    Perche' non lo devrebbero fare, invece, linguaggi di programmazione a piu' alto livello che introducono concetti di programmazione piu' raffinati della programmazione procedurale o quella ad oggetti?

    Perche' non la programmazione funzionale, o quella logica, o quella dichiarativa?

    E sono solo quelle piu' banali!



    Prova a passare a qualcosa del genere



    ed allora si puo' parlare di aprire la mente

    In questi modelli di calcolo, l'assembler sta cosi' in basso che per poterlo vedere ti serve un microscopio ad effetto tunnel

    http://it.wikipedia.org/wiki/Microscopio_a_effetto_tunnel

    Nota: quel qualsiali linguaggio lo rimuoverei.
    Ti voglio vedere ad usare i concetti che trovi nella programmazione di una CPU in Haskell
  • Re: COME INIZIARE

    ultrasound91 ha scritto:


    Oggi tutti i microcontrollori si possono programmare in C.
    Semplicemente ho letto che il ragazzo vuole fare uno studio autonomo e secondo me può impiegare meglio il tempo ad approfondire C e C++, perchè difficilmente realizzerà mai qualcosa di produttivo in ASM.
    E' produttivo imparare (almeno le basi) dell'assembly perché, alla lunga, migliora le proprie capacità di risolvere i problemi in tutti i linguaggi.

    Sei libero di non credere a chi ha più esperienza di te ma sono convinto che tu sbagli e che hai una visione un po' troppo "rigida" dell'informatica e della programmazione.
  • Re: COME INIZIARE

    migliorabile ha scritto:


    Domandona di rito: in che modo dovrebbe aprire la mente?

    Perche' non lo devrebbero fare, invece, linguaggi di programmazione a piu' alto livello che introducono concetti di programmazione piu' raffinati della programmazione procedurale o quella ad oggetti?
    Una cosa non esclude l'altra, non metto l'assembly in alternativa allo studio di altro, non l'ho mai detto migliorabile ...

    Ho solo detto che lo studio dell'assembly permette di comprendere tante cose, una per tutte, l'effettivo significato del concetto di puntatore distinto da quello di dato, UTILISSIMO per lo studio del C e per superare in maniera veloce l'ostico argomento dei puntatori.

    Ma non solo questo.

    Per quanto riguarda tutte le battute ... compreso l'effetto tunnel ... con me risparmiale...
  • Re: COME INIZIARE

    @oregon, dubito di essere molto piu' giovane di te

    Che cosa intendi per una visone rigida dell'informatica e della programmazione?
  • Re: COME INIZIARE

    Dopo il C e il C++, il concetto di puntatore non lo vedi proprio piu'!
  • Re: COME INIZIARE

    migliorabile ha scritto:


    @oregon, dubito di essere molto piu' giovane di te
    Quindi dovresti capire ...
    Che cosa intendi per una visone rigida dell'informatica e della programmazione?
    Ad esempio, che quello che non mi serve subito per scrivere programmi e venderli non mi serve studiare ... concetto estremamente sbagliato ...
    Dopo il C e il C++, il concetto di puntatore non lo vedi proprio piu'!
    Quindi buttiamo pure il C e il C++ ?
  • Re: COME INIZIARE

    ultrasound91 ha scritto:


    Dico solo che ho 24 anni e sto vivendo nel 2015, non nel 1980.
    Questa è una fesseria.
    Per far questo mi è servita tutta la scienza di questo mondo tranne l'ASM.
    Già ... perché c'è stato qualcuno che il tuo compilatore C o il software per scrivere il firmware dei micro l'ha scritto - anche - in ASM e ti ha facilitato il compito ...
    a chi segue un particolare corso universitario e ha chiaro cosa vuole fare sul lavoro.
    Ecco - vedi migliorabile - ci si limita al risvolto lavorativo, non all'acquisizione di conoscenza personale, arricchimento culturale si diceva nel 1980 ...
    Dove lavoro io, una piccola azienza che realizza software su commissione, se ne fregano altamente delle mie conoscenze di segnali, microcontrollori, droni, ecc...
    E cosa mi dici di strano o di nuovo? In altri contesti se ne fregano di Java, Apache e simili ... cosa vuoi dire?
    (d'altra parte non ho brevettato nulla, nè ho pubblicato alcuna invenzione elettronica) ma almeno gli elettrodomestici fuori garanzia in casa li riparlo da solo.
    E che c'entrano gli elettrodomestici adesso??
    Se potessi in un istante cancellare tutte le mie conoscenze di elettronica e raddoppiare quelle di informatica, guadagnerei il doppio.
    A meno che non ti assumesse un produttore di roba elettronica ... magari tra 2 o 5 anni ... non devi essere mai sicuro al 100% di quello che pensi oggi ... non essere "rigido" ... mostra l'elasticità di quei ragazzi che negli anni 80 cominciarono in un garage quello che adesso è il tuo futuro ...
  • Re: COME INIZIARE

    ultrasound91 ha scritto:


    La mia visione dell'ASM è che non è un linguaggio per professionisti. Ma che è dedicato agli ingegneri che devono progettare sistemi operativi, microcontrollori, cpu e shield in generale, quindi nel settore industriale.
    E gli "ingegneri" in questione (sappi che anche chi non è ingegnere, ma scrive codice "con le p..", lavora a quei progetti) COME li chiami se non "professionisti" ?
    E questo lavoro si fa solo nelle grandi e note aziende, non in quelle piccole.
    E quindi? Non puoi lavorare nelle "grandi e note aziende" ?
    Confermo che hai una visione limitata della situazione ... anche Google ricerca e seleziona diplomati, comunque gente che SAPPIA quello che si deve fare ...
    Quindi personalmente non mi acculturo sull'ASM se non posso sognare neanche lontanamente di essere assunto un giorno dalla Intel o dalla Atmel o dalla Microchip.
    Boh ... ma che dici? Quindi io ho studiato Assembly (come tante altri colleghi) solo perché ambivo ad essere assunto dalla Intel ?? Ma che dici ??
    Ciò non toglie che sono un ragazzo che studia anche oltre l'orario lavorativo e che approfondisce i linguaggi.
    Ecco ... fallo e basta!
  • Re: COME INIZIARE

    ultrasound91 ha scritto:


    1) La mia visione dell'ASM è che non è un linguaggio per professionisti.
    2) Ma che è dedicato agli ingegneri che devono progettare sistemi operativi, microcontrollori, cpu e shield in generale, quindi nel settore industriale.
    3) E questo lavoro si fa solo nelle grandi e note aziende, non in quelle piccole.
    4) Quindi personalmente non mi acculturo sull'ASM se non posso sognare neanche lontanamente di essere assunto un giorno dalla Intel o dalla Atmel o dalla Microchip.
    1) No: al contrario, e' per gente che sa programmare con le contro p...!!! Programmare in assembler non e' una passeggiata

    2) Ni, so: non e' solo per questo tipo di applicazioni. Viene usato dove bisogna ridurre al minimo il codice scritto, dove serve estrema efficienza e, come hai fatto notare, quando si e' molti vicini all'hardware

    3) No: ci sono anche le piccole aziendine che implementano hardware dedicato

    4) Sbagliato: ci si accultura per cultura personale. Perche' se vai a fare un colloquio alla Intel e gli dici che conosci gia' l'assembler, secondo te, non e' meglio?

    oregon ha scritto:


    1) Ad esempio, che quello che non mi serve subito per scrivere programmi e venderli non mi serve studiare ... concetto estremamente sbagliato ...
    Dopo il C e il C++, il concetto di puntatore non lo vedi proprio piu'!
    2) Quindi buttiamo pure il C e il C++ ?
    1) mai fatto un'affermazione del genere. Anzi, sempre affermato il contrario. Ma ci sono N-milioni di altre cose da studiare che possono essere piu' utili, sia sul lavoro, sia per quanto riguarda l'apertura della mente e la propria cultura. Altri paradigmi di programmazione, librerie, ... (il link al libro che ho postato non e' un link a caso, io c'e' l'ho! E l'ho letto! )

    Comunque, se hai notato, non ho detto di non studiare l'assembler in assoluto (la prima parte del post), ma di studiarlo usandolo all'interno di codice scritto in C (il paragrafo successivo)!
    E' decisamente piu' probabile che capiti una situazione del genere che non scrivere un sorgente .asm !

    Ed e' anche piu' semplice per chi inizia!

    2) non ho detto questo! Ma C e C++ non sono gli unici linguaggi di programmazione.

    Ormai si va sempre piu' verso linguaggi con il GC, in cui si delega al compilatore ed al runtime la parte piu' a basso livello.

    Con i sistemi sempre piu' sofisticati di type inference, ci si sta' spostando sempre di piu' verso linguaggi in cui non serve piu' nemmeno dichiarare il tipo delle variabili: si arrangia il compilatore a dedurlo (vedasi Scala)!

    I pro ed i contro di questa strategia sono un'altra storia!
Devi accedere o registrarti per scrivere nel forum
21 risposte