Fonte del valore di caricamento nel registro o nella posizione di memoria

3

Quando carichiamo un registro o una posizione di memoria con un valore (ad esempio MVI 3A o MVI 53 ), cosa inizializza il registro o la posizione di memoria con quel valore specifico? È la CPU che esegue l'inizializzazione, giusto? Ma da dove vengono estratti quei valori?

    
posta Lu Ka 28.11.2016 - 21:53
fonte

3 risposte

2

Nota: dato che non hai menzionato quale architettura di istruzioni ti stai chiedendo, devo fare delle supposizioni e delle congetture nella mia risposta. Inoltre, sembra che il libro di testo o il materiale di apprendimento si riferisca ad un'architettura che non è la stessa delle "CPU desktop" di oggi, quindi per favore cita il nome del libro di testo o materiale didattico in modo da sapere a quale architettura si riferisce. / em>

Senza ulteriori informazioni, la mia ricerca su Internet sembra indicare che potrebbe riferirsi a questo libro: Microprocessori e microcontrollori: Architettura, programmazione e progettazione di sistemi 8085, 8086, 8051, 8096

Il I in MVI si riferisce a immediato . Nella programmazione di assiemi, un "valore immediato" è un valore che è direttamente codificato nell'istruzione stessa.

Per semplicità mi concentrerò innanzitutto sul caso di architetture con una dimensione di istruzione fissa, diciamo, ogni istruzione di assemblaggio è a 32 bit.

Parte del 32-bit è usata per memorizzare l'opcode che specifica l'operazione, come addizione, sottrazione, caricamento da memoria, memoria in memoria, ramificazione, ecc. MVI è il mnemonico per un opcode che imposterà un particolare registro per un particolare valore.

I bit rimanenti dell'istruzione a 32 bit vengono utilizzati per scopi diversi a seconda dell'opcode. Diversi codici opzionali usano quei bit rimanenti in modi diversi.

Per MVI , alcuni dei bit rimanenti specificano quale registro della CPU verrà aggiornato con quel "valore immediato". Il resto dei bit è usato per codificare questo valore immediato.

Devo sottolineare che, in genere, la CPU non ha bisogno di fare una richiesta di memoria aggiuntiva per recuperare questo valore immediato. Il motivo è che la CPU ha già caricato l'intera istruzione (32 bit) dalla memoria, prima che possa eseguire la decodifica delle istruzioni calpestare. Pertanto, l'opcode, l'identificatore del registro e il valore immediato vengono tutti caricati nel decodificatore di istruzioni.

Il decodificatore di istruzioni può trasferire questo valore immediato nell'unità aritmetica e logica (ALU) tramite una delle porte di ingresso ALU. L'ALU verrà impostato per non eseguire nulla: passa lo stesso valore di input dell'output. Il file di registro è configurato per accettare questo valore dalla porta di uscita ALU e memorizzarlo nel registro di destinazione, in base all'analisi del decodificatore dell'istruzione MVI .

Il valore immediato è tecnicamente parte dell'istruzione.

Esistono istruzioni simili su molte architetture, anche se i dettagli potrebbero essere diversi.

In alcuni casi, la dimensione della parola di architettura è di 32 bit, il che significa che le operazioni ALU e di memoria sono ampie a 32 bit e anche le dimensioni dell'istruzione sono fisse a 32 bit. Dato che l'opcode e l'identificatore del registro occupano alcuni dei bit di istruzione, non è possibile che il valore immediato sia 32 bit. Invece, il valore immediato è limitato a un minor numero di bit. Ad esempio, se opcode è 6 bit e l'identificatore del registro è 5 bit (supporta fino a 32 registri), il numero restante di bit disponibili per il valore immediato è 32 - 6 - 5 == 21 bit. A seconda dell'architettura, questo valore immediato a 21 bit potrebbe essere interpretato come firmato o non firmato.

In alcune altre architetture, il valore immediato non è inserito nell'istruzione stessa, ma viene memorizzato immediatamente accanto ad esso.

|| Indirizzo | Dati di istruzioni || || 0 | MVI || || 2 | 0x1234 || || 4 | qualunque istruzione segua ||

Per queste architetture, potrebbe richiedere un accesso di memoria aggiuntivo. L'istruzione MVI all'indirizzo 0 fa sì che il decodificatore di istruzioni tratti i dati all'indirizzo 2 non come istruzione, ma come valore per l'istruzione MVI .

Sebbene questo progetto consenta all'istruzione MVI di caricare i dati a larghezza intera (16 bit) nel registro, si noti che crea un pericolo per un'istruzione di ramo per specificare l'indirizzo 2 come target di salto. Poiché i dati possono essere qualsiasi valore arbitrario a 16 bit, un'istruzione di ramo che atterra a questo indirizzo interpreterà erroneamente tali dati come opcode di istruzioni (a qualsiasi opcode che abbia gli stessi pattern di bit di quel valore a 16 bit), e quindi eseguirà un'istruzione arbitraria non voluta dal programmatore di linguaggio assembly.

In alcune altre architetture, è possibile che non abbiano affatto l'equivalente di MVI . Invece, il valore deve essere caricato dalla memoria, in genere denominato LD (caricamento).

|| Indirizzo | Dati / istruzioni || || 0 | LD R1, (indirizzo) 128 || || 2 | qualunque istruzione segua || || ... | ... || || 128 | 0x1234 ||

risposta data 29.11.2016 - 05:39
fonte
1

MVI (Move Immediate) copia un valore immediato dalla posizione di memoria adiacente all'opcode MVI stesso ("operando"). Il valore viene inserito nel codice macchina al momento del montaggio e sarà presente nel segmento di codice (il blocco di memoria che contiene le istruzioni di esecuzione).

    
risposta data 28.11.2016 - 22:00
fonte
0

Generalmente nelle lingue di assembly ci sono sia istruzioni che operandi .

Quando si carica un valore, un'istruzione avrà un operando che specifica i dati necessari all'operazione. Questo potrebbe essere il valore di un'altra posizione di memoria o di un valore letterale, simile a come si può avere un intero o un puntatore all'intero in C. Forse ci sono diverse istruzioni di codice macchina per le due varietà, o forse c'è un indicatore integrato all'operando per specificare come interpretarlo. A livello di assembly, questo è irrilevante.

Quando la CPU carica l'istruzione e la esegue, memorizza il valore letterale a cui appartiene o carica il valore dalla memoria e lo memorizza.

Ciò significa che i valori vengono estratti dall'operando dell'istruzione, ma il valore potrebbe essere un altro livello di riferimento indiretto e memorizzato in un'altra posizione di memoria.

    
risposta data 28.11.2016 - 22:01
fonte

Leggi altre domande sui tag