Sistemi integrati - Modalità di indirizzamento

Un addressing modesi riferisce a come stai indirizzando una data posizione di memoria. Esistono cinque modi diversi o cinque modalità di indirizzamento per eseguire questa istruzione che sono le seguenti:

  • Modalità di indirizzamento immediato
  • Modalità di indirizzamento diretto
  • Registra la modalità di indirizzamento diretto
  • Registra la modalità di indirizzamento indiretto
  • Modalità di indirizzamento indicizzato

Modalità di indirizzamento immediato

Cominciamo con un esempio.

MOV A, #6AH

In generale possiamo scrivere,

MOV A, #data

È definito come immediate perché i dati a 8 bit vengono trasferiti immediatamente all'accumulatore (operando di destinazione).

La figura seguente descrive l'istruzione di cui sopra e la sua esecuzione. Il codice operativo 74H viene salvato all'indirizzo 0202. I dati 6AH vengono salvati all'indirizzo 0203 nella memoria del programma. Dopo aver letto il codice operativo 74H, i dati al successivo indirizzo di memoria del programma vengono trasferiti all'accumulatore A (E0H è l'indirizzo dell'accumulatore). Poiché l'istruzione è di 2 byte e viene eseguita in un ciclo, il contatore del programma verrà incrementato di 2 e punterà a 0204 della memoria del programma.

Note- Il simbolo "#" prima di 6AH indica che l'operando è un dato (8 bit). In assenza di "#", il numero esadecimale sarebbe considerato un indirizzo.

Modalità di indirizzamento diretto

Questo è un altro modo per indirizzare un operando. Qui, l'indirizzo dei dati (dati di origine) viene fornito come operando. Facciamo un esempio.

MOV A, 04H

Il banco di registri # 0 (4 ° registro) ha l'indirizzo 04H. Quando viene eseguita l'istruzione MOV, i dati memorizzati nel registro 04H vengono spostati nell'accumulatore. Poiché il registro 04H contiene i dati 1FH, 1FH viene spostato nell'accumulatore.

Note- Non abbiamo usato "#" nella modalità di indirizzamento diretto, a differenza della modalità immediata. Se avessimo usato "#", il valore del dato 04H sarebbe stato trasferito all'accumulatore invece di 1FH.

Ora, dai un'occhiata alla seguente illustrazione. Mostra come viene eseguita l'istruzione.

Come mostrato nell'illustrazione sopra, questa è un'istruzione a 2 byte che richiede 1 ciclo per essere completata. Il PC verrà incrementato di 2 e punterà a 0204. Il codice operativo per l'istruzione MOV A, l'indirizzo è E5H. Quando viene eseguita l'istruzione a 0202 (E5H), l'accumulatore viene reso attivo e pronto a ricevere i dati. Quindi il PC va all'indirizzo successivo come 0203 e cerca l'indirizzo della posizione di 04H in cui si trovano i dati di origine (da trasferire all'accumulatore). A 04H, il controllo trova il dato 1F e lo trasferisce all'accumulatore e quindi l'esecuzione è completata.

Registra la modalità di indirizzamento diretto

In questa modalità di indirizzamento, usiamo direttamente il nome del registro (come operando sorgente). Cerchiamo di capire con l'aiuto di un esempio.

MOV A, R4

Alla volta, i registri possono assumere valori da R0 a R7. Esistono 32 di tali registri. Per utilizzare 32 registri con solo 8 variabili per indirizzare i registri, vengono utilizzati i banchi di registri. Sono presenti 4 banchi di registri denominati da 0 a 3. Ciascun banco comprende 8 registri denominati da R0 a R7.

Alla volta, può essere selezionato un singolo banco di registri. La selezione di una banca del registro è resa possibile attraverso un fileSpecial Function Register (SFR) denominato Processor Status Word(PSW). PSW è un SFR a 8 bit in cui ogni bit può essere programmato secondo necessità. I bit sono designati da PSW.0 a PSW.7. PSW.3 e PSW.4 vengono utilizzati per selezionare i banchi di registri.

Ora, dai un'occhiata alla seguente illustrazione per avere una chiara comprensione di come funziona.

Opcode EC è utilizzato per MOV A, R4. L'opcode è memorizzato all'indirizzo 0202 e quando viene eseguito, il controllo va direttamente a R4 del banco di registri rispettato (che è selezionato in PSW). Se si seleziona il banco di registri # 0, i dati da R4 del banco di registri # 0 verranno spostati nell'accumulatore. Qui 2F è memorizzato alle 04H. 04H rappresenta l'indirizzo di R4 del banco di registri # 0.

Il movimento dei dati (2F) è evidenziato in grassetto. 2F viene trasferito all'accumulatore dalla posizione di memoria dati 0C H ed è mostrato come linea tratteggiata. 0CH è la posizione dell'indirizzo del registro 4 (R4) del banco di registro n. 1. L'istruzione sopra è 1 byte e richiede 1 ciclo per l'esecuzione completa. Ciò significa che è possibile salvare la memoria del programma utilizzando la modalità di indirizzamento diretto del registro.

Registra la modalità di indirizzamento indiretto

In questa modalità di indirizzamento, l'indirizzo dei dati viene memorizzato nel registro come operando.

MOV A, @R0

Qui il valore all'interno di R0 è considerato come un indirizzo, che contiene i dati da trasferire all'accumulatore. Example: Se R0 ha il valore 20H e i dati 2FH sono memorizzati all'indirizzo 20H, il valore 2FH verrà trasferito all'accumulatore dopo aver eseguito questa istruzione. Vedere la figura seguente.

Quindi il codice operativo per MOV A, @R0è E6H. Supponendo che sia selezionato il banco di registri # 0, R0 del banco di registri # 0 contiene i dati 20H. Il controllo del programma si sposta a 20H dove individua i dati 2FH e trasferisce 2FH all'accumulatore. Questa è un'istruzione a 1 byte e il contatore del programma aumenta di 1 e si sposta a 0203 della memoria del programma.

Note- Solo R0 e R1 possono formare un'istruzione di indirizzamento indiretto del registro. In altre parole, il programmatore può creare un'istruzione utilizzando @ R0 o @ R1. Sono consentiti tutti i banchi di registro.

Modalità di indirizzamento indicizzato

Faremo due esempi per comprendere il concetto di modalità di indirizzamento indicizzato. Dai un'occhiata alle seguenti istruzioni:

MOVC A, @A+DPTR

e

MOVC A, @A+PC

dove DPTR è il puntatore di dati e PC è il contatore del programma (entrambi sono registri a 16 bit). Considera il primo esempio.

MOVC A, @A+DPTR

L'operando di origine è @ A + DPTR. Contiene i dati di origine da questa posizione. Qui stiamo aggiungendo il contenuto di DPTR con il contenuto corrente dell'accumulatore. Questa aggiunta darà un nuovo indirizzo che è l'indirizzo dei dati di origine. I dati puntati da questo indirizzo vengono quindi trasferiti all'accumulatore.

Il codice operativo è 93H. DPTR ha il valore 01FE, dove 01 si trova in DPH (8 bit superiori) e FE si trova in DPL (8 bit inferiori). L'accumulatore ha il valore 02H. Quindi viene eseguita un'aggiunta a 16 bit e 01FE H + 02H restituisce 0200 H. I dati nella posizione 0200H verranno trasferiti all'accumulatore. Il valore precedente all'interno dell'accumulatore (02H) verrà sostituito con il nuovo dato da 0200H. I nuovi dati nell'accumulatore sono evidenziati nell'illustrazione.

Questa è un'istruzione a 1 byte con 2 cicli necessari per l'esecuzione e il tempo di esecuzione richiesto per questa istruzione è elevato rispetto alle istruzioni precedenti (che erano tutte a 1 ciclo ciascuna).

L'altro esempio MOVC A, @A+PCfunziona allo stesso modo dell'esempio precedente. Invece di aggiungere DPTR con l'accumulatore, qui i dati all'interno del contatore di programma (PC) vengono aggiunti con l'accumulatore per ottenere l'indirizzo di destinazione.