5 Dec 2019 - 20:34--=[Computer]=----=[Computer]=----=[Musica]=----=[Musica]=----=[Geometra]=----=[Geometra]=----=[Download]=----=[Download]=----=[Link]=----=[Link]=----=[Articoli]=----=[Articoli]=--
Indice Computer Computer/ Software/ Organizzazione Software - 3/


Parte |1|2|3|4|


Il processore è dotato di un insieme di istruzioni che possono essere suddivise nelle seguenti (classiche) categorie:

  • Istruzioni operative
    Istruzioni per il trasferimento dati;
    Istruzioni di conversione;
    Istruzioni aritmetiche;
    Istruzioni logiche;
    Istruzioni di traslazione/rotazione;
    Istruzioni di ingresso uscita.

  • Istruzioni di controllo
    Istruzioni di salto;
    Istruzioni per la gestione dei sottoprogrammi;
    Istruzione di alt.



Istruzioni operative

- Istruzioni per il trasferimento dati
Le istruzioni di trasferimento sostituiscono l'operando destinato con una copia dell'operando sorgente. Sono considerate istruzioni di trasferimento anche istruzioni per manipolare la pila. Le istruzioni di trasferimento sono:
MOVlun     Movimento(ricopiamento)
PUSHL      Immissione di un operando a 32 bit nella pila
POPL       Estrazione di un operando a 32 bit dalla pila

- Istruzioni di conversione
Queste istruzioni trasformano la rappresentazione di operandi interi, aumentandone la lunghezza. Esse sono:
CWBTW     Converte un byte in una parola
CWWTL     Converte una parola in una parola lunga
CWLTQ     Converte una parola lunga in una doppia parola lunga (64 bit)

- Istruzioni aritmetiche
Queste istruzioni realizzano le più comuni operazioni aritmetiche, su operandi di tipo naturale e/o di tipo intero. Esse sono:
NEGlun     Cambia segno (di un intero)
ADDlun     Somma (fra interi oppure fra naturali)
SUBlun     Sottrazione (fra interi oppure fra naturali)
CMPlun     Confronto (fra interi oppure fra naturali)
IMULlun    Moltiplicazione (fra interi)
IDIVlun    Divisione (fra interi)

- Istruzioni logiche
Queste istruzioni realizzano le più comuni operazioni logiche bit a bit. Esse sono:
NOTlun     NOT logico bit a bit
ANDlun     AND logico bit a bit
ORlun      OR logico bit a bit

- Istruzioni di traslazione
Le istruzioni di traslazione effettuano lo spostamento di ogni bit dell'operando nella posizione adiacente a sinistra o a destra (shift). Le istruzioni di rotazione effettuano traslazioni circolari, nel senso che il bit meno significativo è quello più significativo sono supposti adiacenti. Le istruzioni di traslazione/rotazione sono le seguenti:
SHLlun     Traslazione a sinistra
SHRlun     Traslazione a destra
ROLlun     Rotazione a sinistra
RORlun     Rotazione a destra

- Istruzioni di ingresso/uscita
Queste istruzioni consentono di trasferire dati da/a locazioni dello spazio di I/O. Esse sono:
INlun     Ingresso dati
OUTlun     Uscita dati



Istruzioni di controllo

Questa categoria comprende le istruzionidi salto incondizionato, di salto condizionato dal valore dei flag, di chiamata di sottoprogramma, di ritorno da sottoprogramma e di alt. Tali istruzioni sono:
JMPlun     Salto incondizionato
Jcondlun   Salto sotto condizione
CALL       Chiamata di sottoprogramma
RET        Ritorno al sottoprogramma
HLT        Alt



Descrizioni delle singole istruzioni

Esaminiamo adesso in dettaglio le singole istruzioni, precisando per ognuna di esse l'operazione che la caratterizza e i flag che modifica.

MOVE

Formato:     MOVlun sorgente,destinazione
Azione:      Sostituisce l'operando destinatario con una copia dell'operando sorgente
Flag:        Non viene modificato alcun flag

PUSH

Formato:     PUSHL sorgente
Azione:      Immette nella pila una copia dell'operando sorgente (una parola lunga).
             Più in dettaglio, decrementa il registro SP di 4 e successivamente memorizza una copia 
             dell'operando sorgente in 4 locazioni a partire dalla locazione di memoria il cui indi_
             rizzo è contenuto in ESP
Flag:        Non viene modificato alcun flag

POP

Formato:     POPL destinazione
Azione:      Estrae dalla pila una parola lunga e la sostituisce all'operando destinatario. Più in 
             dettaglio, preleva il contenuto di 4 locazioni a partire da quella il cui indirizzo è 
             contenuto in SP e lo sostituisce all'operando destinatario; successivamente incrementa
             di 4 il contenuto di ESP
Flag:        Non viene modificato alcun flag

CBTW

Formato:     CBTW
Azione:      Converte l'intero contenuto in AL in un intero equivalente lungo una parola e lo memo_
             rizza in AX
Flag:        Non viene modificato alcun flag

CWTD

Formato:     CWTD
Azione:      Converte l'intero contenuto in AX in un intero equivalente lungo una parola lunga e lo 
             memorizza nella coppia di registri DX_AX
Flag:        Non viene modificato alcun flag

CLTD

Formato:     CLTD
Azione:      Converte l'intero contenuto in EAX in un intero equivalente lungo una doppia parola lun_
             ga e lo memorizza nella coppia di registri EDX_EAX
Flag:        Non viene modificato alcun flag

NEG

Formato:     NEGlun destinazione
Azione:      Cambia segno all'operando destinatario, che deve essere di tipo intero
Flag         Vengono modificati i flag CF, OF, SF e ZF

ADD

Formato:     ADDlun sorgente,destinazione
Azione:      Somma l'operando sorgente dall'operando destinatario (modificando quest'ultimo). Entram_
             bi gli operandi possono essere sia di tipo naturale che di tipo intero
Flag:        Vengono modificati i flag CF, OF, SF e ZF

SUBTRACT

Formato:     SUBlun sorgente,dstinazione
Azione:      Sottrae l'operando sorgente dall'operando destinatario (modificando quest'ultimo). En_
             trambi gli operandi possono essere sia di tipo naturale che di tipo intero
Flag:        Vengono modificati i flag CF, OF, SF e ZF

COMPARE

Formato:     CMPlun
Azione:      Verifica se l'operando destinatario è maggiore, uguale o minore dell'operando sorgente
             (sottraendo quest'ultimo dal primo, senza memorizzare il risultato). Nessuno dei due o_
             perandi viene modificato e il risultato del confronto produce un'oportuna modifica dei 
             flag. Entrambi gli operandi possono essere si a di tipo naturale che di tipo intero
Flag:        Vengono modificati i flag CF, OF, SF e ZF

INTEGER MULTIPLY

Formato:     IMULlun sorgente
Azione:      Effettua la moltiplicazione tra un operando sorgente a 8 bit e il contenuto del regi_
             stro AL, tra un operando sorgente a 16 bit e il contenuto del registro AX, tra un ope_
             rando sorgente a 32 bit e il contenuto del registro EAX. Entrambi gli operandi sono di
             tipo intero. Il risultato della moltiplicazione viene generato su un numero di bit dop_
             pio rispetto a quello degli operandi, cosicchè non si ha mai un traboccamento. Se il 
             moltiplicando e il moltiplicatore sono a 8 bit, allora il risultato viene posto in AX.
             Se il moltiplicando e il moltiplicatore sono a 16 bit, allora il risultato viene posto 
             nella coppia di registri DX_AX. Se il moltiplicando e il moltiplicatore sono a 32 bit,
             allora il risultato viene posto nella coppia di registri EDX_EAX.
             Se il risultato non è rappresentabile su un numero di bit pari a quello degli operandi 
             (non può essere contenuto nel solo AL, nel solo AX o nel solo EAX), allora viene posto
             a 1 il flag OF
Flag:        Vengono modificato i flag OF, SF e ZF

INTEGER DIVIDE

Formato:     IDIVlun sorgente
Azione:      Divide il contenuto di AX, della coppia di registri DX_AX, ovvero della coppia di regi_
             stri EDX_EAX per l'operando sorgente, a seconda che questi sia a 8, a 16 o a 32 bit.
             Entrambi gli operandi sono di tipo intero. Il quoziente e il resto vengono generati con
             un numero di bit pari a quello del divisore e vengono memorizzati rispettivamente il AL
             e AH, in AX e DX, ovvero in EAX ed EDX. Poichè l'istruzione produce un quoziente con un
             numero di bit pari a quello del divisore, si può avere traboccamento: quando ciò accade,
             viene generata un'eccezione (in particolare viene generata un'eccezione anche quando il
             divisore è 0)
Flag:        Restano indefiniti i flag CF, OF, SF e ZF

NOT

Formato:     NOTlun destinazione
Azione:      Esegue l'operazione di NOT logico bit a bit sull'operando destinatario
Flag:        Non viene modificato alcun flag

AND

Formato:     ANDlun sorgente,destinazione
Azione:      Effettua l'operazione di AND logico bit a bit tra l'operando sorgente e l'operando de_
             stinatario (modificando quest'ultimo)
Flag:        Vengono posti a 0 i flag CF e OF, e vengono modificati i flag SF E ZF

OR

Formato:     ORlun sorgente,destinazione
Azione:      Effettua l'operazione di OR logico bit a bit fra l'operando sorgente e l'operando de_
             stinatario (modificando quest'ultimo)
Flag:        Vengono posti a 0 i flag CF e OF, e vengono modificati i flag SF e ZF

SHIFT LEFT

Formato:     SHLlun destinazione
Azione:      Sposta ciascun bit dall'operando destinatario nella posizione immediatamente più a si_
             nistra. Il bit meno significativo è sostiuito da 0, mentre il bit più significativo
             viene copiato nel flag CF
Flag:        Vengono modificati i flag CF, SF e ZF
             Sposta a sinistra

SHIFT RIGHT

Formato:     SHRlun destinazione
Azione:      Sposta ciascun bit dell'operando destinatario nella posizione immediatamente più a
             destra. Il bit più significativo è sostituito da 0, mentre il bit meno significati_
             vo viene copiato nel flag CF
Flag:        Vengono modificati i flag CF, SF e ZF
             Sposta a destra

ROTATE LEFT

Formato:     ROLlun destinazione
Azione:      Sposta ciascun bit dell'operando destinaztario nella posizione immediatamente più a
             sinistra, sostituendo il bit meno significativo con quello più significativo. Il bit
             più significativo viene anche copiato nel flag CF
Flag:        Vengono modificati i flag CF, SF e ZF
             Rotazione

ROTATE RIGHT

Formato:     RORlun destinazione
Azione:      Sposta ciascun bit dell'operando destinatario nella posizione immediatamente più a
             destra, sostituendo il bit più significativo con quello meno significativo. Il bit
             meno significativo viene anche copiato nel flag CF
Flag:        Vengono modificati i flag CF, SF e ZF
             Rotazione

INPUT

Formato:     INlun sorgente,registro_a
Azione:      Ricopia in AL, AX oppure EAX il contenuto della porta, della doppia porta oppure del_
             la quadrupla porta indirizzata (l'indirizzo si riferisce allo spazio di I/O)
Flag:        Non viene modificato alcun flag

OUTPUT

Formato:     OUTlun registro_a,porta
Azione:      Ricopia il contenuto di AL, di AX oppure EAX nella porta, nella doppia porta oppure
             nella quadrupla porta indirizzata (l'indirizzo si riferisce allo spazio di I/O)
Flag:        Non viene modificato alcun flag

JUMP

Formato:     JMP EIP+spiazzamento
Azione:      Trasferisce nel registro EIP la quantità che si ottiene sommando il contenuto attuale
             di EIP con lo spiazzamento, provocando in tal modo una modifica al normale flusso se_
             quenziale del programma (la prossima istruzione verrà prelevata a partire dall'indi_
             rizzo rappresentato dal nuovo contenuto di EIP)
Flag:        Non viene modificato alcun flag

CONDITIONAL JUMP

Formato:     Jcond EIP+spiazzamento
Azione:      Se il valore dei flag indica che la condizione cond è soddisfatta, una tale istruzione
             trasferisce nel registro EIP la quantità che si ottiene sommando il contenuto di EIP
             con lo spiazzamento. In caso contrario non viene compiuta nessuna azione (il contenuto
             di EIP rimene inveriato)
Flag:        Non viene modificato alcun flag
Di seguito sono riassunti i codici operativi delle istruzioni di questo gruppo, e per ciascuno di essi è spiegato brevemente il significato della condizione di salto:
JE           Segue un'istruzione CMP: il salto avviene se l'operando destinatario era uguale al_
             l'operando sorgente

JNE          segue un'istruzione CMP: il salto avviene se l'operando destinatario era diverso dal_
             l'operando sorgente

JA           Segue un'istruzione CMP tra operandi di tipo naturale: il salto avviene se l'operando
             destinatario era maggiore dell'operando sorgente

JAE          segue un'istruzione CMP tra operandi di tipo naturale: il salto avviene se l'operando
             destinatario era maggiore o uguale rispetto all'operando sorgente

JG           segue un'istruzione CMP tra operandi di tipo intero: il salto avviene se l'operando
             destinatario era maggiore dell'operando sorgente

JGE          segue un'istruzione CMP tra operandi di tipo intero: il salto avviene se l'operando de_
             stinatario era maggiore o uguale rispetto all'operando sorgente

JZ           il salto avviene se l'istruzione precedente ha posto a 1 il flag ZF (risultato uguale
             da zero); istruzione equivalente a JE

JNZ          il salto avviene se l'istruzione precedente non ha posto a 1 il flag ZF (risultato di_
             verso da zero); istruzione equivalente a JNE

JC           il salto avviene se l'istruzione precedente ha posto a 1 il flag CF

JO           il salto avviene se l'istruzione precedente ha posto a 1 il flag OF

JS           il salto avviene se l'istruzione precedente ha posto a 1 il flag SF

CALL

Formato:     CALL EIP+spiazzamento
Azione:      salva nella pila il contenuto del registro EIP e successivamente trasferisce in tale re_
             gistro la quantità che si ottiene sommando il contenuto attuale di EIP con lo spiazza_
             mento. Tale istruzione effettua quindi un salto a un sottoprogramma (chiamata), conserva_
             ndo in pila l'indirizzo di rientro (cioè dell'istruzione che nel programma seguiva l'i_
             struzione CALL)
Flag:        Non viene modificato alcun flag

RETURN

Formato:     RET
Azione:      Preleva una parola lunga dalla pila e la trasferisce in EIP. Tale istruzione deve chiu_
             dere un sottoprogramma, e produce il ritorno al programma chiamante (quello che ha se_
             guito una CALL), all'indirizzo successivo rispetto all'istruzione di chiamata
Flag:        Non viene modificato alcun flag

ALT

Formato:     HLT
Azione:      Provoca la cessazione di ogni attività da parte del processore (fino a un nuovo comando
             di reset)
Flag:        Non viene modificato alcun flag


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