18 Aug 2019 - 07:01--=[Computer]=----=[Computer]=----=[Musica]=----=[Musica]=----=[Geometra]=----=[Geometra]=----=[Download]=----=[Download]=----=[Link]=----=[Link]=----=[Articoli]=----=[Articoli]=--
Indice Computer Computer/ Software/ Organizzazione Software - 2/


Parte |1|2|3|4|


Ogni istruzione che viene eseguita dal processore specifica da un lato il tipo di operazione da eseguire (codice operativo), e dall'altro le modalità per individuare gli operandi su cui compiere le elaborazioni o l'indirizzo della prossima istruzione (modalità di indirizzamento). Descriveremo adesso i formati delle istruzioni e le modalità di indirizzamento del processore PS, introducendo in modo formale un linguaggio simbolico, in corrispondenza biunivoca con il linguaggio macchina.
Molte istruzioni operative del processore compiono elaborazioni su due operandi, sostituendo uno di essi con il risultato dell'operazione effettuata: l'operando che alla fine viene sostituito è detto operando destinatario (e il luogo dove si trova è detto destinazione), mentre l'altro operando (che rimane inalterato) è detto operando sorgente (e anche il luogo dove si trova è detto dorgente). A livello di linguaggio simbolico un'istruzione a due operandi ha il formato:
COlun     sorgente, destinazione

Il campo COlun rappresenta il codice operativo dell'istruzione, che specifica anche la lunghezza degli operandi: B(o b) significa byte, W (o w) parola e L (o l) parola lunga. I campi sorgente e destinazione individuano, rispettivamente, l'operando sorgente e l'operando destinatario. Anche la modalità di indirizzamento vengono specificate dal codice operativo: tuttavia, a livello di linguaggio simbolico, queste vengono esplicitate nei campi sorgente e destinazione.
Per alcune istruzioni a due operandi, il campo di destinazione è omesso: in questi casi le informazioni relative all'operando destinatario sono implicite nel codice operativo delle istruzioni stesse. A livello di linguaggio simbolico, un'istruzione di tale tipo ha il formato:
COlun     sorgente

Altre istruzioni operative compiono operazioni su un solo operando, sostituendo alla fine con il risultato dell'operazione: questo è detto operando destinatario (e il luogo dove si trova destinazione). A livello di linguaggio simbolico un'istruzione a un operando ha il formato:
COlun     destinazione

Le istruzioni di controllo trasferiscono un nuovo valore nel registro EIP (eventualmente al verificarsi di certe condizioni), dato dalla somma del contenuto EIP con un numero intero detto spiazzamento (displacement). Esse hanno il formato:
COcond     EIP + spiazzamento



Indirizzamento di registro

Con questa modalità di indirizzamento, l'operando è contenuto in uno dei registri generali a 32 bit, in uno dei registri generali a 16 bit ovvero nel registro SP, oppure in uno degli 8 registri generali a 8 bit. I seguenti esempi chiariascono come questo indirizzamento viene indicato a livello di linguaggio simbolico:
COL     EAX
    Significato: l'operando è a 32 bit e risiede nel registro EAX.


COB     BL,AL
    Significato: gli operandi sono a 8 bit: l'operando sorgente risiede nel registro BL e 
    l'operando destinatario nel registro AL.



Indirizzamento diretto

Questa modalità di indirizzamento si utilizza quando l'operando è in memoria. L'istruzione contiene un numero naturale a 32 bit, che rappresenta l'indirizzo della prima delle locazioni in cui si trova l'operando. I seguenti esempi chiariscono come questa modalità di indirizzamento viene indicata a livello di linguaggio simbolico.
COB     00002000
    Significato: l'operando è a 8 bit e risiede nella locazione di memoria di indirizzo 2000.


COW     00002001
    Signifiato: l'operando è a 16 bit e risiede nella doppia locazione di memoria di indirizzo 2001.


COL     EAX,00003100
    Significato: gli operandi sono a 32 bit: l'operando sorgente (individuano mediante l'indiriz_
    zamento di registro) risiede in EAX; l'operando destinatario (individuato mediante l'indiriz_
    zamento diretto) risiede nella quadrupla locazione di memoria di indirizzo 3100.



Indirizzamento indiretto con registro puntatore

Anche questa modalità di indirizzamento si utilizza quando l'operando è in memoria. L'istruzione specifica un registro a 32 bit (registro puntatore), il cui contenuto viene interpretato come indirizzo della locazione a partire dalla quale si trova l'operando. I seguenti esempi chiariscono come questa modalità di indirizzamento viene indicata a livello di linguaggio simbolico.
COB     (EAX)
    Significato: l'operando è a 8 bit e risiede nella locazione di memoria il cui indirizzo è conte_
    nuto in EAX.


COW     (EBX)
    Significato: l'operando è a 16 bit e risiede nella doppia locazione di memoria il cui indirizzo 
    è contenuto in (EBX)


COL     (EBX),EAX
    Significato: gli operandi sono a 32 bit. L'operando sorgente (individuato mediante l'indirizzamen_
    to indiretto con registro puntatore) risiede nella quadrupla locazione di memoria il cui indirizzo
    è contenuto in EBX, e l'operando destinatario (individuato mediante l'indirizzamento di registro) 
    risiede in EAX.

L'indirizzamento indiretto con registro puntatore può essere utilizzato per accedere in sequenza agli elementi di un vettore (che in memoria occupano locazioni consecutive): semplici operazioni di aggiornamento del contenuto del registro fanno passare da un elemento al successivo (o al precedente).


Indirizzamento modificato

Questa modalità di indirizzamento rappresenta una generalizzazione delle precedenti due. Nell'istruzione sono specificati uno spiazzamento (numero naturale di 8 bit o 32 bit) e un registro di modifica (di 32 bit): la somma (modulo 232) dello spiazzamnto (esteso a 32 bit) e del contenuto del registro rappresenta l'indirizzo della locazione a partire dalla quale si trova l'operando. Il seguente esempio chiarisce come questa modalità di indirizzamento viene indicata a livello di linguaggio simbolico.
COB     00002000(EBX)

Significato: l'operando è a 8 bit e risiede nella locazione di memoria il cui indirizzo si ottiene sommando al contenuto di EBX lo spiazzamento 00002000

L'indirizzamento modificato serve per accedere agli elementi di vettori o alle componenti di strutture (anch'esse occupano locazioni consecutive di memoria), e può essere utilizzato dal programmatore in due modi differenti.

  • Indirizzamento con registro indice
    Lo spiazzamento rappresenta l'indirizzo di partenza di un vettore (indirizzo del primo elemento), sempre a 32 bit, mentre il contenuto del registro seleziona uno specifico elemento: semplici operazioni di aggiornamento del contenuto del registro (detto in tal caso registro indice) fanno passare da un elemento del vettore al successivo (o al precedente). L'indirizzamento con registro indice viene anche utilizzato per accedere ad elementi corrispondenti a diversi vettori: per questo occorre che le istruzioni che elaborano i singoli vettori abbiano spiazzamenti distinti, ma utilizzino tutte lo stesso registro indice.
  • Indirizzamento con registro base
    Il registro base contiene l'indirizzo di partenza di una struttura (insieme consecutivo di locazioni di memoria), mentre lo spiazzamento seleziona un particolare elemento della struttura medesima. Cambiando il contenuto del registro (detto in tal caso registro base) si seleziona l'elenco corrispondente di una differente struttura.



Indirizzamento immediato

In questo casol'operando è contenuto nell'istruzione stessa (operando immediato). Pertanto è possibile utilizzare l'indirizzamento immediato solo nelle istruzioni e due operandi e per il solo operando sorgente. I seguenti esempi chiariscono come questa modalità di indirizzamento viene indicata a livello di linguaggio simbolico.
COB     $20,AL
    Significato: gli operandi sono a 8 bit: l'operando sorgente (indiduato mediante l'indirizzmento
    immediato) è contenuto nell'istruzione e vale 20; l'operando destinatario (individuato mediante
    l'indirizzamento di registro) è contenuto in AL.


COW     $0032,2B(EBX)
    Significato: gli operandi sono a 16 bit: l'operando sorgente (individuato mediante l'indirizza_
    mento immediato) è contenuto nell'istruzione e vale 0032; l'operando destinatario (individuato
    mediante l'indirizzamento modificato) si trova nella doppia locazione il cui indirizzo si ottiene 
    sommando 0000002B con il contenuto di EBX.

L'indirizzamento immediato è utile quando si utilizzano come operandi delle costanti.


Indirizzamento relativo

Questo indirizzamento è possibile solo per le istruzioni di controllo. Nell'istruzione è presente uno spiazzamento (numero intero a 8 bit oppure a 32 bit), e l'indirizzo di salto (nuovo contenuto di EIP) è dato dalla somma (modulo 232) tra il contenuto attuale di EIP e lo spiazzamento (esteso a 32 bit). Notare che EIP contiene l'indirizzo dell'istruzione sequenzialmente successiva, e che sono possibili sia salti indietro che salti in avanti (lo spiazzamento è un numero intero). La lunghezza dello spiazzamento determina l'intervallo dei possibili indirizzi di salto nell'intorno del contenuto di EIP. I seguenti esempi chiariscono come questa modalità di indirizzamento viene indicata a linguaggio simbolico.
CO     EIP+5B
    Significato: l'indirizzo di salto si ottiene dalla somma tra il contenuto attuale di EIP e
    la quantità 5B (EIP contiene l'indirizzo della istruzione sequenzialmente successiva).


CO     EIP-00002A31
    Significato: l'indirizzo di salto si ottiene dalla differenza tra il conteggio attuale di EIP
    e la quantità 00002A31 (EIP contiene l'indirizzo della istruzione sequenziale successiva).



Modi di indirizzamento per i vari formati

Precisiamo adesso quali modalità di indirizzamento possono venir utilizzate dalle varie istruzioni, in dipendenza dal loro formato (le modalità di indirizzamento sono specificate nel codice operativo). Con il codice registro intenderemo la modalità di indirizzamento di registro, con il termine memoria intenderemo le modalità di indirizzamento diretto, indiretto con registro puntatore e modificato (con registro indice o di base), e con il termine immediato intenderemo la modalità di indirizzamento immediato. Inoltre con il termine di registro_a intenderemo uno dei registri AL, AX, EAX. Infine, con il termine relativo intenderemo la modalità di indirizzamento relativo. La classificazione è la seguente:

  • Istruzioni operative a due operandi
    COlun     sorgente,destinazione
    Operandi:
    Registro-Memoria
    Memoria-Registro
    Registro-Registro
    Immediato-Memoria
    Immediato-Registro

  • Istruzioni operative a due operandi (campo di destinazione non presente)
    COlun     sorgente
    Operandi:
    Memoria-Implicito
    Registro-Implicito
    Immediato-Implicito

  • Istruzioni operative a un operando
    COlun     destinazione
    Operando:
    Memoria
    Registro

  • Istruzioni di ingresso/uscita
    INlun     sorgente,registro_a
    OUTlun     registro_a,destinazione
    Operandi di sorgente e destinazione: indirizzamento diretto se l'indirizzo è minore di 256, oppure diretto tramite il registro DX.

  • Istruzioni di controllo
    CO     EIP+spiazzamento
    Operandi:
    Relativo-implicito


Vai Prossimo
Vai Precedente
--=[Home page]=----=[Home page]=----=[Forum]=----=[Forum]=----=[lingua]=----=[lingua]=----=[Statistiche]=----=[Statistiche]=----=[Cerca in questo sito]=----=[Cerca in questo sito]=----=[Info sul copyright]=----=[Info sul copyright]=----=[Scegli le impostazioni che preferisci]=----=[Scegli le impostazioni che preferisci]=----=[Scrivi al webmaster]=--
vPHPvHTMLvCSS