|
Tutorial
|
Dettaglio Istruzioni |
|
|
 |
Istruzioni
della Cpu 80x86 |
SCHEDA n° 07 [I/
174
di 198] |
 |
|
SHLD - Sposta
verso sinistra con ingresso del bit source più significativo |
|
 | Questa istruzione non
appartiene al Set dell'8088/86; si usa solo con 80286/486. |
 | Questa istruzione (SHift
logical Left Double) esegue lo spostamento
(shift) verso sinistra dei bit dell'operando destinazione
(un registro o una locazione di
memoria a 16 o a 32 bit) introducendo
da destra al loro posto i bit dell'operando
sorgente (un registro
della medesima dimensione dell'operando
destinazione). |
 | Il meccanismo dell'istruzione risulta chiaro
osservando il suo schema funzionale; con riferimento ad un operando
a 16 bit, ogni volta che viene eseguita:
 | tutti i bit dell'operando destinazione vengono spostati
(Shift) di un posto verso sinistra. |
 | il bit più
significativo (bit15 a 16
bit) dell'operando destinazione sarebbe perduto, spinto fuori
dall'operando, ma viene invece memorizzato nella flag
di Carry, al posto di quello che c'era prima. |
 | il posto lasciato libero dal bit
meno significativo (bit0) dell'operando
destinazione viene
sovrascritto con il bit più
significativo (bit15 a 16
bit) dell'operando sorgente. |
|
 | 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 terzo operando (contatore),
di solito il numero 1 oppure il
contenuto del registro CL; è possibile specificare anche un
numero fino a 255 (cioè esprimibile da un byte, come
CL). |
 | Nonostante il valore del terzo operando,
comunque espresso,
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. |
 | Le sue caratteristiche sono riassunte nella
seguente tabella (leggi le istruzioni
): |
| SHLD
Destinaz,Sorg,NumVolte |
Dest
<< NumVolte SHLD Destinazione + Sorgente
|
|
|
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 |
SHLD
|
BX,AX,10
|
no |
no |
3 |
2 |
no |
4,7 |
# |
|
|
|
# |
# |
? |
# |
# |
| SHLD |
EDX,EAX,10 |
| SHLD |
[Depo02],AX,10 |
7 |
3 |
| SHLD |
[Depo04],EAX,10 |
| |
|
|
|
|
|
|
|
SHLD
|
BX,AX,CL
|
no |
no |
3 |
3 |
no |
3,7 |
| SHLD |
EDX,EAX,CL |
| SHLD |
[Depo02],AX,CL |
7 |
4 |
| SHLD |
[Depo04],EAX,CL |
 | La tabella evidenzia che, oltre alla flag
di Carry coinvolta fisicamente nello shift, vengono influenzate anche altreflag. |
 | La figura seguente mostra le risorse
richieste da questa istruzione in funzione degli operandi coinvolti (leggi le
istruzioni): |
|
Addr |
|
Codifica
Masm |
|
Sequenza
Bytes |
|
Istruzione |
|
0100
0102 |
|
55AA
55AA1188 |
|
AA 55
88 11 AA 55 |
|
Depo02
Depo04 |
DW 55AAH
DD 55AA1188H |
| ---- |
|
------------------- |
|
-------------------- |
|
------- |
---------------------- |
0106
010A
010F
0115
011C
011F
0123
0128 |
|
0F A4 C3
0A
66 0F A4 D0 0A
0F A4 06 0100
0A
66 0F A4 06 0102
0A
0F A5 C3
66 0F A5 D0
0F A5 06 0100
66 0F A5 06 0102 |
|
0F A4 C3
0A
66 0F A4 D0 0A
0F A4 06 00 01
0A
66 0F A4 06 02
01 0A
0F A5 C3
66 0F A5 D0
0F A5 06 00 01
66 0F A5 06 02
01 |
|
|
SHLD BX,AX,10
SHLD EDX,EAX,10
SHLD [Depo02],AX,10
SHLD [Depo04],EAX,10
SHLD BX,AX,CL
SHLD EDX,EAX,CL
SHLD [Depo02],AX,CL
SHLD [Depo04],EAX,CL |
|
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|