Terminologia: & # 8220; registri & # 8221; nella programmazione del linguaggio assembly

StackOverflow https://stackoverflow.com/questions/814448

  •  03-07-2019
  •  | 
  •  

Domanda

Ho sentito le terminologie: registro, registro hardware, registro programmi, file registro.

Qual è la differenza tra tutti questi? E nel complesso, qual è il tipo di registro EAX? Registrazione del programma?

È stato utile?

Soluzione

Un registro è un'area di memoria all'interno della CPU. Ecco alcune definizioni:

  • Un file di registro è un array di registri: vedi http://en.wikipedia.org/wiki / Register_file per una descrizione completa.
  • Il registro eax è il registro accumulatore della famiglia di CPU Intel x86 - è il luogo in cui viene eseguita la matematica dei numeri interi.
  • Il registro del programma (penso che tu intenda il contatore del programma) è un registro per scopi speciali che contiene l'indirizzo della successiva istruzione del codice macchina da eseguire

Altri suggerimenti

Un registro è il dispositivo di memorizzazione dei dati più semplice. Ora queste sono le principali differenze.

Un file di registro è generalmente una grande raccolta di registri organizzata in modo tale da essere utilizzata per i calcoli. In un moderno processore, tutti i calcoli vengono eseguiti tra valori memorizzati in più registri in un file di registro.

Un registro hardware generalmente si riferisce a registri che memorizzano informazioni sulla configurazione e sullo stato. Questo potrebbe essere per il processore o qualche dispositivo I / O hardware esterno.

Un registro di programma può fare riferimento al contatore del programma, un registro speciale che memorizza la posizione di memoria dell'istruzione corrente eseguita dal processore.

un registro è un po 'di memoria che si trova all'interno della CPU. e viene utilizzato dal linguaggio assembly per eseguire varie attività.

potrebbe essere che per registro del programma intendi il contatore del programma?

Bene, hai registri di uso generale, quindi hai registri che hanno un uso speciale (ad esempio, i registri dei contatori del programma) e ne hai vari altri (registri di memoria / segmento, SSE).

EAX, EBX, ecc. sono i registri standard generici. Puoi usarli per quello che vuoi. Di solito, si suppone che il valore restituito sia inserito in EAX, ma è praticamente tutto. Quindi hai il puntatore dello stack EBP, che punta all'inizio del tuo stack. Infine, devi programmare il contatore, che punta all'istruzione corrente, EIP. Su x86, ci sono alcuni casi speciali, in cui due registri vengono fusi quando si eseguono calcoli di numeri interi a 64 bit. Esistono casi più speciali per le istruzioni di stringa. Se stai per imparare l'assemblaggio, la cosa più semplice sarebbe iniziare con un PowerPC, che ha più registri, e sei libero di usarli tutti senza restrizioni.

Tutti questi registri sono ovviamente registri hardware, cioè sono fisicamente integrati nella tua CPU;) Il posto in cui si trovano è chiamato file di registro.

L'altro tipo di registri che puoi vedere è se hai una macchina virtuale che utilizza i registri ( Parrot ), ottieni "registri virtuali", che vengono successivamente assegnati a registri reali. Questo è simile a quello che puoi fare quando scrivi un compilatore da solo, in pratica assumi un numero illimitato di registri (ovvero, ne generi uno nuovo ad ogni utilizzo) e fai la trasformazione in registri reali in una fase diversa (allocazione dei registri ).

A "registro hardware" potrebbe anche riferirsi a una posizione all'interno di un dispositivo hardware. Ad esempio, una UART (porta COM) sembra un connettore a forma di D con 9 o 25 pin dall'esterno del cabinet, ma al driver del dispositivo assomiglia a diversi registri di configurazione, un registro di stato e registri di dati che tengono il carattere successivo a invia e riceve l'ultimo carattere. (Ho lasciato fuori un lotto di dettagli lì.)

Nell'architettura x86 quei registri si trovano di solito in uno spazio di indirizzi fisico speciale a cui si accede con le istruzioni I / O. In altre piattaforme, è comune che i registri hardware vengano mappati in un angolo del normale spazio di memoria. In entrambi i casi, uno dei ruoli importanti di un sistema operativo e dei suoi driver di dispositivo è impedire al codice dell'applicazione di conoscere i dettagli di dove si trovano i registri hardware e cosa significano.

In alcuni tipi di dispositivi hardware, la distinzione tra i registri di memoria e hardware è meno chiara. Ad esempio, la scheda video contiene un blocco di memoria noto come frame buffer che contiene i valori di colore e luminosità per ogni singolo pixel. Quella memoria è un grande registro hardware o è solo un buffer che ha un effetto collaterale interessante?

In relazione alla domanda, ci sono due tipi generali di registri che dovresti considerare:

  • registri di programma
  • registri hardware

I registri hardware sono cronometrati (aggiornati sui segni di spunta dell'orologio) e sono utilizzati nella progettazione fisica dei circuiti del processore.

I registri del programma sono memoria ad accesso casuale e sono contenuti in un file di registro situato nella CPU. Le istruzioni del codice assembly / machine accedono a questi registri tramite nomi come% eax,% esp,% rdi,% edi, ecc.

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