Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305

    Compilatore e linguaggio macchina

    Salve , mi sono posto una domanda: partendo dal fatto che il compilatore , a partire dal file sorgente scritto in linguaggio ad alto livello , una volta compilato , crea il modulo oggetto che è scritto in linguaggio macchina. Adesso sappiamo che il linguaggio macchina varia a seconda della macchina e dell'architettura. Quindi mi chiedo come fa il compilatore a conoscere il linguaggio macchina del calcolatore sul quale viene eseguito?
    Grazie a tutti anticipatamente

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Di solito il compilatore crea eseguibili solo per una particolare famiglia di cpu o al massimo lo dovrai specificare durante la compilazione
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    Salve , mi sono posto una domanda: partendo dal fatto che il compilatore , a partire dal file sorgente scritto in linguaggio ad alto livello , una volta compilato , crea il modulo oggetto che è scritto in linguaggio macchina. Adesso sappiamo che il linguaggio macchina varia a seconda della macchina e dell'architettura. Quindi mi chiedo come fa il compilatore a conoscere il linguaggio macchina del calcolatore sul quale viene eseguito?
    Grazie a tutti anticipatamente
    Tipicamente lo stesso compilatore eseguito su piattaforme diverse (es. ARM e Intel) compila codice nativo per il processore su cui gira (nell'esempio ARM e Intel), perchè quando viene portato lo si predispone così.

    I compilatori usualmente supportano (compilano) per default per la versione X di una certa famiglia di processori, lo stesso su cui girano; usando switch a riga di comando si può far sì che il codice sia eseguibile su CPU con determinate estensioni (64 bit, multimedia, oggi crittografia etc).

    Per quanto ne so il compilatore più "jolly" è il mitico Gnu-C (gcc) che è stato portato su (praticamente) qualsiasi cosa, spesso in associazione con Linux e i suoi vari cugini (Unix, Aix e così via).

    Nulla vieta (ma sono più rari,cross compiler) di far predisporre da un processore Intel un codice oggetto per ARM (si usano principalmente per preparare programmi per sistemi embedded).

    Nel mondo desktop oggi esistono relativamente poche famiglie di CPU, con al primissimo posto Intel x86 ed evoluzioni, ARM e poche altre (IBM Power, qualche vestigia MIPS, qualche Itanium, ma sono ormai quasi spariti).

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Quote Originariamente inviata da MySQL Visualizza il messaggio
    Tipicamente lo stesso compilatore eseguito su piattaforme diverse (es. ARM e Intel) compila codice nativo per il processore su cui gira (nell'esempio ARM e Intel), perchè quando viene portato lo si predispone così.

    I compilatori usualmente supportano (compilano) per default per la versione X di una certa famiglia di processori, lo stesso su cui girano; usando switch a riga di comando si può far sì che il codice sia eseguibile su CPU con determinate estensioni (64 bit, multimedia, oggi crittografia etc).

    Per quanto ne so il compilatore più "jolly" è il mitico Gnu-C (gcc) che è stato portato su (praticamente) qualsiasi cosa, spesso in associazione con Linux e i suoi vari cugini (Unix, Aix e così via).

    Nulla vieta (ma sono più rari,cross compiler) di far predisporre da un processore Intel un codice oggetto per ARM (si usano principalmente per preparare programmi per sistemi embedded).

    Nel mondo desktop oggi esistono relativamente poche famiglie di CPU, con al primissimo posto Intel x86 ed evoluzioni, ARM e poche altre (IBM Power, qualche vestigia MIPS, qualche Itanium, ma sono ormai quasi spariti).
    ok . quindi se ho capito bene il compilatore in qualche modo riesce a conoscere il codice macchina della piattaforma sulla quale gira.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    ok . quindi se ho capito bene il compilatore in qualche modo riesce a conoscere il codice macchina della piattaforma sulla quale gira.
    In generale, il compilatore non ha bisogno di sapere nulla della macchina su cui gira.

    Semmai deve sapere l'architettura target per cui compilare, ovvero gli deve essere indicato (tramite apposite opzioni) per quale CPU o famiglia di CPU generare il codice. Se l'architettura richiesta è supportata dal compilatore vuol dire che questo possiede tutte le informazioni del set di istruzioni di quell'architettura.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Quote Originariamente inviata da oregon Visualizza il messaggio
    In generale, il compilatore non ha bisogno di sapere nulla della macchina su cui gira.

    Semmai deve sapere l'architettura target per cui compilare, ovvero gli deve essere indicato (tramite apposite opzioni) per quale CPU o famiglia di CPU generare il codice. Se l'architettura richiesta è supportata dal compilatore vuol dire che questo possiede tutte le informazioni del set di istruzioni di quell'architettura.
    si ma non ho capito in cosa consistono queste istruzioni?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Istruzioni del processore, il suo set di istruzioni.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    quindi conosce il liguaggio usato dal processore?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ti ho già detto ... conosce il set completo (e le caratteristiche) dell'architettura di destinazione. Ad esempio, il compilatore C della Microchip che può girare su PC x86, può generare, a partire dal sorgente C, il codice macchina di un micro PIC perché ne conosce l'architettura e il set di istruzioni macchina.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    quindi conosce il liguaggio usato dal processore?
    Giudica tu stesso https://github.com/LuaDist/tcc/blob/master/i386-asm.h

    E questa è l'ISA x86 http://www.intel.com/content/dam/www...ual-325383.pdf

    Come vedi, il compilatore conosce ogni minimo dettaglio della cpu per cui sta andando a compilare i sorgenti.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.