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 ||