Tutorial |
Dettaglio Istruzioni |
Istruzioni della Cpu 80x86 |
SCHEDA n° 07 [I/ 165 di 198] |
|
|
Questa istruzione (Shift Arithmetic Right) esegue lo spostamento (shift) verso destra dei bit dell'operando destinazione (un registro o una locazione di memoria) con ingresso del bit più significativo, cioè del suo bit di segno. |
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:
|
Poichè il bit più significativo dell'operando è anche il suo bit di segno, lo schema dell'istruzione può essere anche il seguente: |
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ù SAR con contatore a 1 risulta più veloce e consuma meno bytes in memoria di programma rispetto alla SAR eseguita con il numero specificato in CL. |
Le sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni ): |
SAR Destinazione,NumeroVolte | Destinazione << NumeroVolte SAR 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 | ||
SAR |
DL,1 |
2 | 2 | 3 | 3 | no | 2 | # | # | # | ? | # | # | |||
SAR | BX,1 | |||||||||||||||
SAR | [Depo01],1 | 15+EA | 7 | 7 | 4 | 2 | 2,4 | |||||||||
SAR | [Depo02],1 | 23+EA | ||||||||||||||
SAR |
DL,CL |
8+4/bit | 5+n | 3 | 3 | no | 2 | |||||||||
SAR | BX,CL | |||||||||||||||
SAR | [Depo01],CL | 20+EA | 8+n | 7 | 4 | 2 | 2,4 | |||||||||
SAR | [Depo02],CL | 28+EA | ||||||||||||||
SAR |
AL,02 |
no | 5+n | 3 | 2 | no | 2,3 | |||||||||
SAR | [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 SAR (vedi figura) sottolinea che questa istruzione può essere usata per prendere decisioni in funzione del valore assunto dai singoli bit di un determinato dato; 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 165 - SAR |
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|