Tutorial |
Dettaglio Istruzioni |
Istruzioni della Cpu 80x86 |
SCHEDA n° 07 [I/ 173 di 198] |
|
|
Questa istruzione (SHift logical Left) esegue lo spostamento (shift) verso sinistra dei bit dell'operando destinazione (un registro o una locazione di memoria) con ingresso di zero da destra. |
L'operando può avere dimensione di un byte, di una word o di una doubleword ( con 80386/486). | |||||||
Il meccanismo dell'istruzione risulta chiaro
osservando il suo schema funzionale; con riferimento ad un operando
a 8 bit, ogni volta che viene eseguita:
|
Questa istruzione ha funzionamento identico alla SAL ed è compilata con lo stesso codice operativo. | |
Risulta evidente che il valore iniziale della flag di Carry è ininfluente per il risultato di questa istruzione. | |
Il numero di volte che questo meccanismo viene eseguito dipende dal valore del secondo operando (contatore), di solito il numero 1 oppure il contenuto del registro CL; con processori dal 80286 è possibile specificare anche un numero fino a 255 (cioè esprimibile da un byte, come CL). | |
Nonostante il valore del secondo operando, comunque espresso, a partire dal 80286 il numero di volte massimo possibile è limitato dal processore a 31; in pratica i 3 bit più significativi del contatore vengono assunti comunque uguali a 000. Questa scelta si può far risalire alla necessità di mantenere basso il tempo totale d'esecuzione dell'istruzione e quindi il tempo d'attesa del servizio di una eventuale richiesta d'interruzione. | |
Nonostante l'apparenza l'esecuzione di più SHL con contatore a 1 risulta più veloce e consuma meno bytes in memoria di programma rispetto alla SHL eseguita con il numero specificato in CL. |
Le sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni ): |
SHL Destinazione,NumeroVolte | Destinazione << NumeroVolte SHL di Destinazione | |||||||||||||||
Esempio di Applicazione |
Cicli di Clock | Mem Acces |
N° Bytes |
Flag influenzate | ||||||||||||
Mnemonico | Operandi | 86 | 268 | 386 | 486 | O | D | I | T | S | Z | A | P | C | ||
SHL |
DL,1 |
2 | 2 | 3 | 3 | no | 2 | # | # | # | ? | # | # | |||
SHL | BX,1 | |||||||||||||||
SHL | [Depo01],1 | 15+EA | 7 | 7 | 4 | 2 | 2,4 | |||||||||
SHL | [Depo02],1 | 23+EA | ||||||||||||||
SHL |
DL,CL |
8+4/bit | 5+n | 3 | 3 | no | 2 | |||||||||
SHL | BX,CL | |||||||||||||||
SHL | [Depo01],CL | 20+EA | 8+n | 7 | 4 | 2 | 2,4 | |||||||||
SHL | [Depo02],CL | 28+EA | ||||||||||||||
SHL |
AL,02 |
no | 5+n | 3 | 2 | no | 2,3 | |||||||||
SHL | [Depo01],02 | 8+n | 7 | 4 | 2 | 2,4 |
La tabella evidenzia che, oltre alla flag di Carry coinvolta fisicamente nello shift, vengono influenzate anche altreflag. | |
Il meccanismo logico della SHL (vedi figura) sottolinea che questa istruzione può essere usata per prendere decisioni in funzione del valore assunto dai singoli bit di un determinato dato, ma soprattutto si comporta come una moltiplicazione binaria per 2. | |
La figura mostra il codice necessario per sommare 10 a BL se i bit di AL sono trovati a 1: |
|
La figura seguente mostra le risorse richieste da questa istruzione in funzione degli operandi coinvolti (leggi le istruzioni): |
|
|
Scheda n° 07 | Istruzioni Cpu 80x86 | |||||||
Istruzione 173 - SHL |
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|