Tutorial |
Dettaglio Istruzioni |
Istruzioni della Cpu 80x86 |
SCHEDA n° 07 [I/ 161 di 198] |
|
|
Questa istruzione (ROtate Left) esegue la rotazione verso sinistra dei bit dell'operando destinazione (un registro o una locazione di memoria); rispetto alla RCL non attraversa la flag di Carry, ma mantiene in essa la copia del bit estratto. |
L'operando può avere dimensione di un byte, di una word o di una doubleword ( con 80386/486). | |||||||
In pratica i bit coinvolti nella rotazione sono quelli previsti dal registro operando. | |||||||
Il meccanismo dell'istruzione risulta chiaro
osservando il suo schema funzionale; con riferimento ad un operando
a 8 bit, ogni volta che viene eseguita:
|
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ù ROL con contatore a 1 risulta più veloce e consuma meno bytes in memoria di programma rispetto alla ROL eseguita con il numero specificato in CL. |
Le sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni ): |
ROL Destinazione, NumeroVolte | Destinazione << NumeroVolte ROL 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 | ||
ROL |
DL,1 |
2 | 2 | 3 | 3 | no | 2 | # | # | |||||||
ROL | BX,1 | |||||||||||||||
ROL | [Depo01],1 | 15+EA | 7 | 7 | 4 | 2 | 2,4 | |||||||||
ROL | [Depo02],1 | 23+EA | ||||||||||||||
ROL |
DL,CL |
8+4/bit | 5+n | 3 | 3 | no | 2 | |||||||||
ROL | BX,CL | |||||||||||||||
ROL | [Depo01],CL | 20+EA | 8+n | 7 | 4 | 2 | 2,4 | |||||||||
ROL | [Depo02],CL | 28+EA | ||||||||||||||
ROL |
AL,02 |
no | 5+n | 3 | 2 | no | 2,3 | |||||||||
ROL | [Depo01],AL | 8+n | 7 | 4 | 2 | 2,4 |
La tabella evidenzia che, oltre alla flag di Carry coinvolta fisicamente nella rotazione, viene influenzata anche la flag di Overflow: (assume valore definito solo se il secondo operando è diverso da 1, funzione del valore dei 2 bit più significativi; altrimenti è la flag è indefinita). | |
Il meccanismo logico della ROL (vedi figura) sottolinea la capacità di questa istruzione favorire le decisioni in funzione del valore assunto dai singoli bit di un determinato dato; in realtà la sua utilità è molto più evidente nella capacità di scambiare la parte alta con la parte bassa di un registro; | |
La figura mostra un esempio con operandi a 8 bit: se in ingresso AL=5AH, in uscita sarà AL=A5H: |
|
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 161 - ROL |
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|