Newsgroup: it.comp.programmare
Titolo: Cosa è il codice macchina e come nasce?

Salve,
come da oggetto, cosa è, *realmente* il codice macchina?
E come fa un compilatore a prendere l'ASCII e tradurlo in questo *strano*
codice che non so come definire... elettronico? Digitale?
Grazie
--
Luigi
Web Site: 
http://web.tiscali.it/luigi_web
E-mail: 
cybe...@email.it
ICQ #46240443

 codice che non so come definire... elettronico? Digitale?
Di solito ha delle "tabelle" di traduzione. Dipende molto anche dal
linguaggio. Con l'Assembly hai un rapporto 1:1, cioe` per esempio
l'istruzione
move.l d1,d4
potrebbe essere tradotta con
0000000200010100
I primi 8 bit il codice di istruzione, i 4 seguenti il numero di
registro di destinazione, gli altri 4 quello di destinazione.
Ripeto che e` solo un esempio, i codici possono essere diversi, possono
essere istruzioni a 8 bit, a 16 bit, a 32 bit o anche a linghezza
variabile, dipende dall'architettura del processore.
Con linguaggi ad alto livello di solito si procede a una trasformazione
in assembly e poi alla traduzione 1:1 di cui sopra. Una singola
istruzione C corrisponde a decine o centinaia di istruzioni Assembly.
Bye.

 essere eseguite da esso.
Si, ma per caso tutte le istruzioni, sono poi salvate in qualche file?
In pratica gli exe, cosa contengono? Il decoder della CPU, in che "formato" 
prende i bit da elaborare?
Ciao 
-- 
Luigi

 prende i bit da elaborare?
Qui passiamo a parlare di eseguibili. :)
Dipende dall'architettura del Sistema Operativo, a questo punto.
Non so come funzionino gli exe in particolare. Solitamente il
compilatore mette in testa a un file eseguibile (quindi nel caso di
Windows, il .exe) una parte fissa per l'inizializzazione del processo.
Naturalmente il compilatore scrive nel file eseguibile il codice
macchina.
Quando tu carichi l'eseguibile (clickando sull'icona o lanciandolo da
riga di comando o in altri modi), il S.O. lo carica in memoria a una
certa locazione di memoria, diciamo X, lo aggiunge alla lista dei
processi (se e` multitasking), eventualmente prepara la tabella di
conversione degli indirizzi di memoria.
A questo punto entra in azione lo scheduler che, quando viene il turno
del processo (sempre in un sistema multitasking) salta alla locazione X
e inizia a far funzionare il processo (ora in memoria).
Se ti chiedi "come fa a saltarci?" ti rispondo subito: i processori
hanno un registro particolare che si chiama solitamente Program Counter
(PC per brevita`) che contiene l'indirizzo in memoria della prossima
istruzione da eseguire. Basta scrivere in quel registro un indirizzo di
memoria e il processore, automaticamente, al prossimo ciclo di clock
utile (quindi quando ha finito l'istruzione attuale) legge quel valore
dal registro, legge dalla memoria l'istruzione e la esegue.
A questo punto bisognerebbe parlare di come il Sistema Operativo
riprende il controllo del processore se il programma non glielo torna,
ma il discorso si fa lungo e ti consiglio un buon libro di architettura
dei Sistemi Operativi.
Per esempio, nel DOS (monotasking) il controllo torna al S.O. solo alla
fine del processo, nei vecchi Mac e in Windows fino alla 3.x era il
programma che ridava il controllo al S.O. quando decideva lui. Nei S.O.
Windows piu` recenti, in tutti gli Unix e in genere nei S.O.
multitasking come Amiga o altri) c'e` un timer che manda un interrupt
al processore, che passa in una modalita` "superiore" (supervisore o
simile) e torna il controllo allo scheduler del S.O. mentre il processo
viene "ibernato" e mandato in wait. Poi lo scheduler sceglie quale
altro processo eseguire e lo scongela.
Bye.

Il processo di funzionamento della CPU e dell'esecuzione di un programma,
bene o male lo conosco. Io mi chiedevo come dal codice ASCII, nasca questo
codice "digitale" o simile... in pratica mi chiedo, per caso viene letto del
testo e poi tradotto in impulsi elettrici??
Cmq, penso che prenderò qualche libro :)
ciao


 Cmq, penso che prenderò qualche libro :)
Ti posso consigliare poco, solo quelli che ho preso per l'Universita`,
comunque dovrebbero (vado a memoria) essere
"Architettura dei calcolatori" per quanto riguarda la parte hardware
"Sistemi operativi" per quanto riguarda il S.O. o, comunque diversi
libri che contengono le paroline magiche "Sistemi Operativi" nel
titolo, tra cui il libro di Tanenbaum.
Per i compilatori non saprei. Potresti prendere il codice del gcc e
perdertici dentro, oppure cercare un libro sulla loro architettura.
Bye.

 elettrici (corrispondenti a 0 e 1 in un ordine prestabilito)
E' questo il punto cruciale! :) In pratica, io mi chiedo da da dove prende
gli uno e zeri. Cioč, sotto quale forma... ASCII? Mi pare strano. Cmq,
grazie per tutte le info!


 grazie per tutte le info!
Binario! L'ASCII e` solo una codifica standardizzata per alcuni codici
binari.
Per esempio la "A" corrisponde al codice 65, in binario 01000001. Tutti
i file sono salvati in binario (Windows fa anche una distinzione tra
testo e binario, ma puoi non farci caso).
Allo stesso modo sono rappresentati in memoria. L'unita` fondamentale
della memorizzazione e` il bit (0 o 1) e non il byte, che e` solo una
serie ordinata di 8 bit. La memoria si misura in byte per convenzione,
ma e` formata da bit.
I bit sono rappresentati a livello hardware con due tensioni di
corrente diverse, per esempio 0 V per 0 e +5 V per 1.
Bye.

 Per esempio la "A" corrisponde al codice 65, in binario 01000001.
eh eh, ovvio :)
Per ASCII intendevo, testo o simile, cmq, grazie per le info, e questo
conferma le mie (e non solo) affermazioni, ovvero che creare un compilatore
è la cosa più difficile che ci sia dal punto di vista del lato software
dell'informatica :)
Ciao


 per caso viene letto del testo e poi tradotto in impulsi elettrici??
quindi i tuoi dubbi riguardano il funzionamento dei compilatori, e non 
del linguaggio macchina. Ho capito bene?
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 *strano* codice che non so come definire... elettronico? Digitale?
non risponde esattamente alla tua domanda, ma credo che il mio articolo 
"Un esempio di macchina virtuale: la macchina di Von Neumann" 
(disponibile su 
cpp.programmazione.it
) ti possa essere utile per chiare 
qualche concetto.
Semmai leggilo e manda un altro messaggio se non hai capito qualcosa.


 del linguaggio macchina. Ho capito bene?
Diciamo che mi interessa sia il passaggio da ASCII (o meglio, dall'assembly)
al codice macchina che il "formato" del codice macchina.
Ciao


 Semmai leggilo e manda un altro messaggio se non hai capito qualcosa.
Ok, grazie, ora lo vedo


 dell'informatica :)
Punto di vista del tutto opinabile.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

> Punto di vista del tutto opinabile.
Allora dimmi la tua :)
Cmq intendo un *vero* compilatore
ciao


> Cmq intendo un *vero* compilatore
Propongo io!
Crea un sistema operativo.
e dico *vero* sistema operativo.
ci conto eh? ;-) ciao Augusto

 e dico *vero* sistema operativo.
Eh eh, ma mica intendo che il resto, č una bazzecola!
Cmq, credo che un OS sia forse piů complesso... bisogna conoscere piů cose,
ma i compilatori sono proprio difficili! :)


 Punto di vista del tutto opinabile.
"Opinabile" e` un eufemismo.  Un compilatore si scompone
assai bene in stadi successivi, ciascuno dei quali non ha
di necessita` difficolta` terribili.  Dipende dal linguaggio di
partenza, dal codice-macchina d'arrivo, e dalla eventuale
necessita` di ottimizzazione: chiaramente C++ sara` MOLTO
piu` arduo di, che so, Pascal, i processori Intel molto piu`
ardui di un PowerPC (tipo Macintosh), e l'ottimizzazione
puo` aggiungere difficolta`, ma questi sono problemi dei
linguaggi e dell'ottimizzatore, non del compilatore di per se.
Problemi non altrettanto scomponibili, tipicamente quelli
che coinvolgono aspetti di parallelismo e tempo reale,
sono generalmente assai piu` difficili.
Alex

> 
un video gioco con le palle (vedi quake 3 e successivi)
è + difficile

Io intendevo la creazione un compilatore in maniera completa.
--
Luigi

 Io intendevo la creazione un compilatore in maniera completa.
"La creazione di un compilatore in maniera completa" consiste nello
sviluppo di alcuni moduli che, di natura, sono ben separati e dalle
interfacce "pulite":
-- analisi lessicale (certo non difficile, no?)
-- analisi sintattica (idem)
-- (facoltativo) ottimizzazione indipendente dalla macchina
-- generatore di codice dipendente dalla macchina
-- (facoltativo) ottimizzazione dipendente dalla macchina
Ad esempio, il compilatore Pascal portatile di Pemberton e
Daniels, scaricabile a 
http://www.cwi.nl/~steven/pascal/pcom.p
comprende 4000 righe di codice Pascal compresi commenti
e linee bianche; manca solo il generatore di codice dipendente
dalla macchina e relativo facoltativo ottimizzatore.  L'interprete
(per il debug) del codice intermedio (p-code) e` di 1000 righe
di codice Pascal: quanto vuoi che sia lo sforzo di trasformarlo
in un generatore di codice?!  Diciamo (tanto per essere SICURI
di esagerare) che decuplica, 10,000 righe.  Totale, 14,000
righe (e di Pascal, mica di Python: in Python puoi pensare di
metterci AL MASSIMO la meta`, piu` facilmente 1/5 delle righe).
Solo linguaggi dell'astrusa e assurda complessita` di C++, ovvero
linguaggi di altissimo livello semantico, possono essere considerati tali 
da rendere sia pur minimamente problematica la scrittura di un compilatore.
In ogni caso il compilatore NON deve mai dibattersi coi problemi
davvero difficili, quelli della concorrenza (multithreading/tasking) e
relativi "bug irriproducibili", condizioni di corsa, ecc ecc.  A parita`
di righe di codice, e` ovvio che un compilatore e` molto piu` semplice
di un programma che la concorrenza DEVE smazzarsela.
La tua asserzione continua dunque a risultare totalmente infondata.
Alex

 La tua asserzione continua dunque a risultare totalmente infondata.
Ripeto, forse perchè non conosco bene il loro funzionamento.
Grazie
P.S.: Ma c'è qualche aspetto dell'informatica che non conosci :)) ??
-- 
Luigi
Email: 
cybe...@email.it

P.S.: Ma c'č qualche aspetto dell'informatica che non conosci :)) ??
forse quelli che sono ancora da scoprire ma non ci metterei la mano
sul fuoco :))
--
Lawrence "Rhymes" Oluyede
rhy...@myself.com

 P.S.: Ma c'è qualche aspetto dell'informatica che non conosci :)) ??
Ad esempio, cosa sia pubblicato in italiano, quanto buone siano le
traduzioni, ecc ecc, non e` decisamente il mio forte!
Alex

 traduzioni, ecc ecc, non e` decisamente il mio forte!
Eh eh, io intendevo nel senso tecnico, hardware, software, internet etc..
Ciao


 generare codice macchina 8086).
Mi intrometto poichè oggi ho iniziato il corso di Linguaggi e
Traduttori proprio con Crespi Reghizzi.
I testi adottati per il corso sono
"Linguaggi formali e artificiali - di Crespi Reghizzi. Ed. Città Studi"
Per la parte del corso che riguarda la teoria dei linguaggi, automi(?),
grammatiche e traduzioni.
Per la seconda parte, che riguarda le tecniche di compilazione
dei linguaggi di programmazione, egli dice che un altro suo libro
(di cui non ha detto il titolo) è ormai antiquato e che in italiano
non c'è granchè di interessante.
Il testo che adotta lui è:
"Modern compiler implementation - Appel. Ed. CAMBRIDGE
UNIVERSITY PRESS"
Esiste la versione in C e in Java. A suo dire dovrebbero essere
sostanzialmente equivalenti, anche se quella java è (credo)
dell'anno successivo.
--
Gerolamo

 supposizioni sono giuste o no?
No.  Se tu in realta` non sai nulla di che tempo stia facendo fuori, e dici
che piove, sei uno spudorato bugiardo, anche se affermi cio` di cui nulla
sai "per sapere se le tue supposizioni sono giuste o no".  Una persona
onesta direbbe invece "scusate, non so che tempo faccia, ma ho come
l'impressione che forse piova, potreste per favore chiarirmi le idee?".
Alex

 ha scritto nel messaggio
news:UXxe8.24871$v7.9...@twister1.libero.it...

Luigi ma che ti sei messo in testa? di costruire qualche virus in quattro e
quattrotto? ahaha
non farlo ...
ma se la tua curiosita' non ti abbandona penso diventerai un genio
dell'informatica.

 l'impressione che forse piova, potreste per favore chiarirmi le idee?".
Va be si, ho sbagliato a porre il quesito iniziale.
ciao


 dell'informatica.
Scusa, ma ci conosciamo? :)
ciao
