Newsgroup: it.comp.lang.c++
Titolo: [OT] Come viene generato il codice macchina?

Volevo "semplicemente" sapere come fa un compilatore a generare codice
macchina, cioè, su che basi crea una sequenza di cifre binarie?
Grazie.
--
Posted from [195.223.215.6] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 macchina, cioč, su che basi crea una sequenza di cifre binarie?
Molto (ma molto) semplicemente ti rispondo che devi pensare un compilatore
come ad un "traduttore" che trasforma istruzioni scritte in linguaggio di
alto livello (C, C++, Basic, TPascal ecc.), in istruzioni scritte in codice
macchina per il tipo di processore sul quale deve girare il programma
(Intel, Motorola, Alpha, ecc.)
Ecco come vengono tradotte in assembler tre righe di C per processori Intel:
    int a = 1;            ==>    mov    dword ptr [ebp - 04h], 1
    int b = 2;            ==>    mov    dword ptr [ebp - 08h], 2
    int c = a + b;        ==>    mov    eax, dword ptr [ebp - 4]
                                 add    eax, dword ptr [ebp - 8]
                                 mov    dword ptr [ebp - 0Ch], eax
Il linguaggio macchina viene rappresentato con comandi tipo mov, add ecc.
perchč sia leggibile, perň di fatto č memorizzato sotto forma di sequenze di
byte:
mov    dword ptr [ebp - 04h], 1    ==> C7 45 FC 01 ...
mov    dword ptr [ebp - 08h], 1    ==> C7 45 F8 02 ...
Ovviamente le cose che fa un compilatore sono n-mila (in passato ho lavorato
su un compilatore ed č stata la cosa piů difficile che mi sia capitato di
fare). Pensa ad esempio al compilatore del C++: controllo sintattico,
preprocessore, ottimizzazioni, ecc.

macchina, cioè, su che basi crea una sequenza di cifre binarie?
Ogni operazione in codice macchina possiede un opcode e viene
costruita secondo criteri precisi. Il compilatore non fa altro che
tradurre una istruzione ad alto livello in piu' istruzioni a basso
livello e produrre il relativo codice secondo opcode e parametri. La
cosa piu' difficile e' implementare le ottimizzazioni e i controlli
semantici. La cosa poi /veramente/ difficile e' scrivere compilatori
per le architetture RISC ! ;)
--
Andrea Laforgia (ICQ 87230455)
------------------------------ 
#exclude <windows.h>

 macchina, cioč, su che basi crea una sequenza di cifre binarie?
Non ne sono sicuro... ma credo che da qualche parte abbia una lista che
gli dice... questo comado si "traduce" cosi... naturalmente a un semplice
comando C/C++ o di qualunque altro linguaggio ad Alto livello non č che
corisponde una singola istruzzione asembler...
--------------------------------------------------
 Just listen to teacher:
 "The only good Windows is an UnIstalled Windows"
--------------------------------------------------
 IL RAZZIATORE
 EMAIL: 
razzi...@usa.net
 WEB:   
http://www.geocities.com/il_razziatore/
 ICQ:   67552596
--------------------------------------------------

 macchina, cioč, su che basi crea una sequenza di cifre binarie?
"Traduce" il codice assembler in codice binario (ad ogni istruzione č
associata una combinazione di cifre).
L'argomento č un *tantino complicato*, per cui ti consiglio di leggerti un
buon manuale.
Ciao,
Vale

mov    dword ptr [ebp - 08h], 1    ==> C7 45 F8 02 ...
Ma poi da C7 45 FC 01 diventa 1010? (non letteralmente).
Quindi per poter creare un compilatore, tra le altre cose, principalmente si
deve conoscere l'assembler?
Eventualmente, conosci qualche guida on-line e non, per poter cominciare?


 Eventualmente, conosci qualche guida on-line e non, per poter cominciare?
All'università (CDL in Informatica, e anche in Ing. Inf. mi pare) ci fanno
interi corsi sopra tra parentesi me li becco tra un anno o due), temo non
sia per niente facile :-(
Massimo

deve conoscere l'assembler?
La prima domanda fa intuire che tu voglia creare un grattacielo
partendo non dal tetto, ma dalle antenne 8)
Luc.

No, io voglio partire dalla base, quindi mi informo.
Cmq non capisco il tuo esempio... mi sembra fuori luogo.
--
Sapete cosa ha di buono windows?
Se lo sapete ditemelo perchč
sto ancora cercando di capirlo!
--
Non č stato rilevato nessun bug nel sistema.
Si desidera crearne uno?



Sbaglio ho vuoi creare un compilatore?
Luc.

Sbagli, perchè non credo proprio di poterci riuscire attualmente.
--
Sapete cosa ha di buono windows?
Se lo sapete ditemelo perchè
sto ancora cercando di capirlo!
--
Non è stato rilevato nessun bug nel sistema.
