Stavo solo pensando, come fa il codice binario dell'interprete delle macchine? Tutto quello che capisco è che il tuo codice viene convertito in 1 e 0, in modo che la macchina possa capirli, ma come fanno a farlo? È solo un testo normale alla traduzione binaria?Come le macchine interpretano il binario?
risposta
In primo luogo, "binario" non significa ciò che pensate significhi (qualsiasi dato sul computer, incluso il testo è già binario, solo il modo in cui decidiamo di visualizzare e gestire è diverso).
In secondo luogo, la compilazione non è una semplice trasformazione di caratteri divertenti (se lo fosse, non avremmo bisogno di compilatori diversi per lingue diverse). Per avere effettivamente una certa comprensione del codice macchina, è necessario comprendere l'architettura che si prefigge. Ci sono molte architetture di computer, il tuo PC è solo uno di questi. È un argomento molto vasto e richiede una solida comprensione dell'architettura dei computer da cogliere.
Mostrerò un esempio di istruzioni MIPS. Se sei interessato, puoi leggere e ottenere alcune conoscenze sull'argomento, prova i link alla fine del mio post.
MIPS è un argomento introduttivo molto popolare perché il suo formato di istruzioni è uno dei più digeribili. Le istruzioni MIPS sono ampie a 32 bit. Ci sono 3 tipi di istruzioni in MIPS: "R", "I" e "J". Daremo un'occhiata alle istruzioni "I".
Quando il processore riceve un'istruzione (32 bit di dati), lo legge e decide cosa fare con esso. "I" istruzioni simile a questa:
|------|-----|-----|----------------|
opcode rs rt immediate
6 5 5 16 (the numbers show how wide are each part)
Il significato di questi:
- codice operativo racconta che tipo di istruzione di questo è (per esempio: addizione, sottrazione, moltiplicazione e molti altri). Tutte le istruzioni (compresi i tipi "R" e "J") iniziano con l'opcode a 6 bit, ed è così che il processore sa di che tipo si tratta.
- rs e rt sono registri, una sorta di memoria nel processore che può contenere valori a 32 bit. MIPS ne ha 32 e sono identificati dal loro numero. Questo non è lo stesso della memoria, è all'interno della CPU stessa.
- immediato è un numero. Si chiama così perché il numero è "proprio lì" nell'istruzione, non in un registro o memoria.
Un esempio concreto di aggiungere un immediato ad un numero memorizzato in un registro:
001000 00001 00010 0000000000000011
In questo esempio, l'istruzione rotto in parti come sopra.Il significato dei valori è il seguente:
- codice operativo:
001000
significaaddi
o "Aggiungi immediata". - rs:
00001
è1
in decimale, quindi questa parte dell'istruzione dice il processore che vogliamo utilizzare registrare 1 come rs. - rd:
00010
è2
in decimale, stessa idea come con rs. - immediato:
0000000000000011
è3
in decimale.
L'istruzione addi
funziona così: si prende il valore trovato nel rs e aggiunge il valore immediato ad esso. Dopo di che mette il risultato in rd. Quindi, quando l'istruzione è terminata, rd conterrà 3 + 2 = 5.
In breve, i compilatori analizzano il testo e generano istruzioni al processore di destinazione che fa la stessa cosa che intendevi fare con il tuo programma. Come puoi vedere, c'è un enorme divario tra la rappresentazione testuale del programma scritta da noi programmatori e il codice macchina eseguibile.
alcune risorse utili su MIPS e l'architettura del computer:
- Video lecture on computer architecture
- How instruction decoding works inside a MIPS processor
- Computer organization and design
- MARS permette di giocare con MIPS codice macchina
È un argomento enorme quello che stai chiedendo. Vorrei raccomandare l'eccellente libro The elements of computing systems per una panoramica su come i computer e i compilatori sono costruiti in linea di principio. È abbastanza facile da seguire e gli esercizi sono divertenti da fare. La maggior parte è disponibile online al link fornito.
This question ha anche alcuni buoni collegamenti sull'argomento.
Pensate a per di qua. Avete 8 interruttori di alimentazione che ciascun interruttore ha spento (0) o acceso (1). Il computer vedrà tutti e 8 gli interruttori come 1. È ora molto simile a un lucchetto a combinazione. Ogni simbolo sulla tastiera ha la combinazione.
- 1. Le macchine virtuali
- 2. Come si interpretano l'uscita di Devel :: Leak
- 3. Come eseguire il benchmark delle macchine virtuali
- 4. Quanto sono stabili le macchine ec2?
- 5. jquery di testo(), interpretano <br> come nuova linea
- 6. Come verificare se il file è binario?
- 7. Il C# include macchine a stati finiti?
- 8. Come leggere il file binario in C#?
- 9. Trasmettere un messaggio a tutte le macchine disponibili su WiFi
- 10. Condividi le preferenze di Eclipse Oomph su macchine diverse?
- 11. Leggi stdin come binario
- 12. Lo sviluppo su entrambe le macchine Windows e Linux contemporaneamente
- 13. Elenca le macchine virtuali di Azure tramite l'API REST
- 14. Le macchine virtuali necessitano di partizioni di swap?
- 15. Ottimizzazione software per macchine virtuali
- 16. Come estrarre le stringhe hardcoded da un binario in Mac?
- 17. Abilita il log binario MySQL
- 18. Come scalare MySQL con più macchine?
- 19. oggetti di copia tra le diverse virtuali-Macchine efficiente
- 20. Come scrivere macchine a stati con C#?
- 21. Codice binario Parse.com download binario
- 22. Come serializzare l'albero binario
- 23. tutorial macchine stato
- 24. Come posso eseguire più macchine Andy
- 25. Process.WaitForExit incoerente su diverse macchine
- 26. Supporto Scala Vector Libreria macchine
- 27. In che modo i browser analizzano e interpretano il codice JavaScript?
- 28. Come si interpretano le suddivisioni di rpart sulle variabili dei fattori durante la creazione di alberi di classificazione in R?
- 29. C#: perché il mio SqlDateTime.MinValue è diverso su macchine diverse?
- 30. Macchine di stato in C