Domanda

Quando in un computer fa astratto (lettere sullo schermo) incontrare il vero (passa corrente elettrica attraverso circuiti in memoria e processori). Come è accaduto che l'evoluzione?

Sto parlando più profondo di assemblatore qui, credo. Forse un livello più profondo di istruzioni del processore? Ad un certo punto i comandi sono in realtà interpretati da hardware, ma non capisco dove / come ciò avvenga.

non sono andato all'università, quindi non ha preso un corso di CS o niente. Come molti, io sono un hobbista girato "pro". Di conseguenza, ci sono molti pezzi del puzzle penso che mi manca. Conosco un po 'di C ++, e comprendere il concetto di puntatori, ecc (anche se non li ho usato in rabbia molto), però ho sempre e solo lavorato a un livello elevato. Non sono sicuro di sapere questa roba kind've mi aiuterà o no, ma è certo interessante.

È stato utile?

Soluzione

Un processore opera ciò che è noto come un ciclo fetch-decodifica-esecuzione. istruzioni in codice macchina sono piuttosto di basso livello (vale a dire non fanno più di tanto in una singola istruzione). Ad esempio, l'aggiunta di due numeri avrebbe una sequenza di istruzioni con la semantica come:

  • Caricare un puntatore all'indirizzo dell'operando 1 nel registro 1
  • Caricare il valore memorizzato all'indirizzo memorizzato nel registro 1 nel registro 2
  • Caricare un puntatore all'indirizzo dell'operando 2 nel registro 1
  • Caricare il valore memorizzato all'indirizzo nel registro 1 nel registro 3
  • Aggiungi il contenuto del registro 2 e registrare 3 e conservarlo nel registro 4
  • Caricare un puntatore alla destinazione nel registro 1
  • memorizzare il contenuto del registro 4 nell'indirizzo specificato nel registro 1

All'interno del processore è una serie speciale di memoria veloce noto come 'File Registrati', che contiene la memoria che il processore utilizza per memorizzare i dati che si sta lavorando al momento. Il file di registro ha diversi registri, che sono identificati in modo univoco. Istruzioni norma lavorano sui registri, specialmente alle architetture RISC; mentre questo non è sempre il caso è una buona astrazione sufficiente per il momento.

In genere un processore deve caricare o memorizzare i dati in un registro di fare qualsiasi cosa con esso. Operazioni come il lavoro aritmetica sui registri, prendendo gli operandi da due registri e mettendo il risultato in un terzo (a beneficio della galleria di arachidi, I sono usato un 6502 - permette di realizzare non confondere la questione; - ). Il processore ha istruzioni speciali per caricare o immagazzinare dati dei registri nella memoria principale della macchina.

Un processore ha un registro speciale chiamato 'contatore di programma' che memorizza l'indirizzo della successiva operazione da eseguire. Così, la sequenza per l'esecuzione di un'istruzione va approssimativamente come:

  • Scarica le istruzioni conservati presso l'indirizzo corrente del contatore di programma.
  • Decodifica l'istruzione, raccolta a parte l'effettivo funzionamento, ciò registra utilizza, il 'modo di indirizzamento' (come funziona dove ottenere o memorizzare i dati) e alcuni altri bit e bob.
  • Eseguire l'operazione.

eseguire l'istruzione cambierà i valori nei vari registri. Ad esempio, un'istruzione di 'carico' copierà un valore in un registro. Un aritmetiche o logiche (AND, OR, XOR) avrà due valori e calcolare un terzo. Un'istruzione di salto o ramo cambierà l'indirizzo presso il contatore di programma in modo che il processore inizia a prendere istruzioni da una posizione diversa.

Il processore può avere registri speciali. Un esempio di tali è il contatore di programma sopra descritto. Un altro tipico è una condizione registrano bandiere. Questo avrà più bit con significati particolari. Ad esempio può avere un flag che è impostato se il risultato dell'ultima operazione aritmetica era zero. Questo è utile per le operazioni condizionali. È possibile confrontare due numeri. Se sono uguali, viene impostato il flag 'zero'. Il processore può avere un'istruzione condizionale che viene eseguito solo se questo flag è impostato.

In questo caso, si potrebbe diminuire un contatore in un registro e se è stato pari a zero, è impostare un flag condizione. Un condizionale (ramo su zero) può essere utilizzata per un ciclo in cui si decrementa un contatore e esce dal ciclo se il risultato dell'istruzione decremento è zero. Su alcuni processori (per esempio la famiglia ARM) Tutte le istruzioni sono condizionale, con uno speciale 'fare sempre' condizione per le istruzioni non condizionali.

Alcuni esempi di istruzioni tipiche del processore sono:

  • incrementare o decrementare un registro
  • Carica o memorizzare il contenuto di un registro nella memoria. Si può anche avere l'indirizzo per caricare o memorizzare compensato dal contenuto di un altro registro. Questo ti permette di facilmente un ciclo su un array di dati incrementando altro registro.
  • Aggiungi, sottrarre, moltiplicare, op logicaProcedure base per calcolare i valori. Questi prendono operandi da due registri e inserire il risultato in un terzo.
  • Jump in un'altra posizione - questo sposta il contenuto della posizione nel program counter e comincia a prendere istruzioni dalla nuova posizione
  • . I valori
  • push o pop in uno stack.

Questo StackOverflow messaggio ha un esempio di un piccolo frammento di codice C compilato e l'uscita linguaggio assembly da quel frammento. Si dovrebbe dare un esempio del tipo di relazione tra un linguaggio di alto livello e l'uscita di codice macchina che si compila a.

Il modo migliore per imparare è quello di ottenere un assemblatore e provarlo. Ciò consente di essere molto più facile per anziani, i computer più semplici come micro a 8 bit degli anni 1980. La cosa più vicina a questo tipo di architettura disponibili in questi giorni sono sistemi embedded. È possibile ottenere una scheda di sviluppo per un processore embedded come un Microchip PIC abbastanza a buon mercato. Poiché questo tipo di architettura ha meno bagaglio di un sistema operativo moderno c'è meno i-punteggiatura e t-crossing di utilizzare chiamate di sistema. Questo renderà più facile bootstrap un programma in linguaggio assembly su questo tipo di architettura; l'architettura più semplice è anche più facile da capire.

Un'altra opzione è quella di ottenere un emulatore come SPIM . Ciò emulare una CPU e ti permettono di assemblare e eseguire programmi su di esso. Il vantaggio di una tale emulatore è che essi avranno anche strutture per singoli programmi passo-passo (molto simile a un debugger) e che mostra il contenuto del file di registro. Questo può essere utile per approfondire la conoscenza di ciò che sta realmente accadendo.

Altri suggerimenti

mi piacerebbe molto consigliamo di leggere il libro Codice , dà una storia dettagliata di come il computer si è evoluta da sistemi diversi.

E 'molto coinvolgente e vi spiegherà come le cose si sono evoluti da codice morse attraverso una semplice calcolatrice e poi a una certa assemblea. Esso dovrebbe darvi un quadro di come esattamente istruzioni macchina vengono interpretato nel e usate da l'hardware di una CPU, memoria, ecc.

In realtà c'è un altro strato sottostante linguaggio macchina che ho scoperto di recente da un amico. Si chiama Microcode.

Si veda questo articolo di Wikipedia per i dettagli: http://en.wikipedia.org/wiki/Microcode

lascia supporre che il più reale è corrente e tensione (se si va più in profondità, si potrebbe scoprire che anche un elettrone è un'astrazione). Il primo passo di astrazione è da considerare che a + 5V tensione rappresentano un bit impostato a '1' e una tensione 0V rappresenta un bit impostato a '0'. Con un interruttore, si può decidere il valore del vostro filo.

Con un secondo filo e un secondo interruttore, si ottengono due valori binari. Il più interessante a che fare con loro è quello di unire i loro valori binari con le operazioni di tali AND, OR e NOT. Due concetti sono coinvolti qui: transistor per il vero e logica per l'estrazione. Con questo, è possibile eseguire addizione, sottrazione e molte altre operazioni sulle due ingressi binari. È possibile aggiungere più fili per rappresentare i valori diversi da '0' e '1'. Andando in questo modo, si ottiene un ALU .

Ora è il momento di includere il tempo. Se si desidera che diversi risultati dal tuo ALU, è necessario fornire i dati di input uno alla volta, che necessitano quindi di un orologio e di un'unità di controllo per le operazioni di sequenziamento. È inoltre necessario memoria per memorizzare valori di input e risultati, e dispositivi di ingresso e di uscita per il comando e l'osservazione. Andando in questo modo, si ottiene un Architettura di von Neumann , che è alla base di quasi tutte le architetture di computer .

Avanti livello di astrazione è quando si decide, con l'elettronica del caso, che questo particolare bit in memoria stimolerà quel particolare pixel del display LCD.

Si potrebbe trovare codice di Charles Petzold una lettura interessante:
http://www.amazon.co. uk / Codice-lingua-DV-undefined-Charles-Petzold / dp / 0735611319

La premessa tua domanda non è corretta. Non v'è alcuna divisione. Il software è inserito e salvato elettronicamente. E 'solo che il software viene visualizzato a voi in una lingua come l'inglese in modo che gli esseri umani possono seguire facilmente.

Così, per esempio, quando si immette "cambiare il mio schermo del desktop a Green," tramite la tastiera, sta andando direttamente su metallo elettronicamente (leggere come tastiera / mouse / schermo tattile) lavoro. E 'solo che si vede come testo inglese sul vostro schermo. Fate un passo avanti, il testo immesso è in linguaggio ad alto livello, vengono convertiti in codice macchina in modo che la CPU in grado di eseguire la logica su di esso. Il codice macchina è in forma elettronica anche. Ad esempio, il testo sarà ottenere convertiti in codici operativi, ecc, ma i codici operativi sono in forma elettronica e CPU in grado di elaborare quelli.

La linea di fondo è che ogni cosa all'interno del computer è in formato elettronico dal momento in cui esso è inserito. E 'sia sul disco rigido o la memoria (transistor, etc). E 'solo che si vede nel testo sullo schermo.

Ancora una volta, non c'è divisione. Software salvati nella memoria (transistor ecc) o il disco rigido è già lì elettronicamente. Hardware (logica hard - cancelli) è necessaria per eseguire il software (ciò che si vuole l'hardware a che fare con il software). Non è possibile inserire qualsiasi cosa in informatica in forma non elettronica.

Spero che questo ha un senso.

Bene, il punto effettivo in cui si incontrano l'hardware dipende da cosa si sta facendo, ovviamente. Ma per prendere il vostro (eccellente) esempio di "visualizzazione del testo":

Da astratta all'hardware:

  • utente digita le lettere nel suo word processor (wp)
  • software wp primi negozi le lettere in memoria come parte del documento in fase di modifica
  • software wp racconta poi la libreria di interfaccia utente che utilizza che vuole visualizzare il testo in fase di modifica in una finestra (questo accade continuamente, naturalmente). La biblioteca interfaccia utente sarà dipendente dal sistema (API di Windows su MS Windows, X Windows o QT ecc su Linux, AWT / Swing su Java, ecc.)
  • La biblioteca UI passerà i dati attraverso un paio di livelli di astrazione. In particolare, esso deve svolgere rasterizzazione (convertire le informazioni "mostra una A" nella griglia di pixel che rappresenta un A)
  • Alla fine, le informazioni verranno passate al driver di periferica della scheda grafica. Questo è dove ci incontriamo "reale" hardware :-). Normalmente, la scheda grafica espone "memoria video", cioè memoria sulla scheda che la CPU possa scrivere. Il driver della scheda grafica (che viene eseguito sulla CPU) scriverà i pixel di una A alla memoria video.
  • circuiti della scheda grafica leggeranno la memoria video e convertire i dati non in un segnale video che esce il connettore video sulla scheda e al monitor.
  • Il monitor visualizzerà quello che appare come un spera A: -)

Questa spiegazione non può essere troppo accademica, ma questo è come lo capisco (non è andato all'università o).

Il primo passo prevede Boole 's algebra che si è rivelato nel 19'th secolo qualsiasi operazione matematica può essere espressa con una serie di simboli e alcuni operatori associati. Così l'aritmetica di base 10 con il comune +, -, *, / operatori possono essere espresse utilizzando due soli simboli (0, 1 / true, false) e logici operatori (AND, OR, ecc) che conduce alla logica booleana che è il fondamento matematico di calcolo digitale.

Il secondo passo è lavoro s 'Alan Turing che ha costruito un modello matematico di un immaginario macchina in grado di elaborare i simboli. La descrizione naive di una macchina di Turing sarebbe qualsiasi automa dotata di memoria (per memorizzarlo di stato), opera su una serie di simboli che rappresentano suo stato e interpreta un'altra serie di simboli che definiscono il passaggio da uno stato all'altro.

Il processore digitale moderna è l'implementazione di una macchina di Turing che utilizza l'algebra di Boole logica come il simbolo e l'operatore di base (date un'occhiata a come roba funziona spiegazione dettagliata della logica di Boole al lavoro ). La ragione di questo è che i veri stati logici / falso può essere facilmente mappati in segnali elettrici (+, -) e loro operatori associati possono essere implementate in transistor circuiti che dato un ingresso binario (segnale elettrico) possono emettere il risultato secondo la operatori booleani. Quindi, qualsiasi computer moderno è una macchina che ha una memoria memorizzarlo Stato (codificati in forma elettrica / magnetica binario) e una serie di circuiti che accetta impulsi elettrici e operatori (le istruzioni del processore) e risultati di output di conseguenza ad una velocità molto veloce.

Così ogni programma scritto in qualsiasi linguaggio di programmazione è infine tradotto dal compilatore o runtime in una serie di operazioni booleane per il processore di eseguire

Codice macchina, credo, è il più basso livello, come si può andare. È inteso direttamente dal processore ed eseguito senza interprete. Il processore è costruito con un certo insieme di istruzioni che definiscono il codice macchina per una data architettura (x86, PPC, ARM, ecc.).

Tutto da disegno lettere sullo schermo per calcolare pi greco è, al suo livello più basso, l'esecuzione in codice macchina. Disegno lettere sullo schermo è solo una questione di creare un codice macchina che calcola lettera altezza, il colore, e le posizioni dei pixel e trame su uno schermo utilizzando un dispositivo di uscita video.

Bene, se si sa come il processore accede alla memoria allora sai già la risposta. Memoria e altro hardware sono accessibili in (quasi) nello stesso modo, a seconda castrato il processore usa "memoria mappata IO" o "IO mappata IO". Nel primo caso, il processore cerca solo di leggere e scrivere in un indirizzo di memoria - ma non ci sono memoria non - invece è un altro dispositivo hardware, ma il processore davvero non si può dire la differenza. Quest'ultimo caso è molto simile.

D'altra parte, se si dispone di alcun indizio su come il processore accede alla memoria, si dovrebbe guardare a ciò che un "bus indirizzi" e un "bus dati" è per iniziare.

Stai diventando sbagliato.

Tutto il computer non, sia mostrando le lettere sullo schermo o fare qualche calcolo, può essere visualizzato in diversi (tanti) livelli di astrazione, dalla corrente elettrica alla manipolazione di concetti astratti come il denaro su un conto bancario.

Detto, la costruzione del circuito per un semplice microprocessore non è così difficile, un'ALU, alcuni registri e una logica di controllo. Altera ha questo tutorial come avanzati per il consiglio di avviamento Cyclone II, ma non riesco a trovare sul web.

Ecco il vero affare. Il mio punto di partenza. Tutto richiede energia per funzionare. L'On / Off è definito entro un limite. ad esempio se tra 3 e 5 v è in se meno di 3 volt suo via. Un concetto codice morse. Sto lavorando su un termometro quindi ho bisogno di fare o comprare un sensore. Poi ho bisogno di calibrarlo. Tradurre i segnali dal segnale di assenza di segnale o la forza del segnale fino ad una temperatura. Questo è dove sono ora.

Non è facile rispondere in una sola frase. Leggere un libro di architettura di computer, imparare un po 'di assemblaggio e sono sicuro che capirete come questo accade.

Quando entriamo qualsiasi tasto o dare qualsiasi comando poi piccole onde elettriche sono diventati a causa premendo chiave è in realtà abbiamo completare il circuito

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top