|
Tutorial
|
Dettaglio Istruzioni |
|
|
 |
Istruzioni
della Cpu 80x86 |
SCHEDA n° 07 [I/
009
di 198] |
 |
|
BOUND - Verifica
che un dato sia compreso tra 2 valori limite |
|
 | Questa istruzione non
appartiene al Set dell'8088/86; si usa solo con 80286/486. |
 | Il suo compito è quello di verificare se il
valore di un puntatore è compreso tra 2 valori
limite. |
 | L'indirizzo
(numero con segno) da verificare è passato come operando destinazione in un registro indice
(come DI o EDI):
rappresenta il puntatore corrente
all'interno di una ben delimitata zona di memoria
(array). |
 | I suoi 2 valori limite sono
predisposti in memoria a partire dall'indirizzo specificato dal operando sorgente,
in sequenza, rispettivamente prima il valore
iniziale (limite superiore)
e poi quello finale (limite inferiore);
di norma questi bytes sono posti all'inizio dell'array che rappresentano,
dentro il quale deve potersi "muovere" il puntatore sotto
verifica. |
 | Per tutti i processori il registro di
riferimento è a 16 bit (come SI
o DI) e la
memoria di riferimento è a 32 bit (2 word, 4 locazioni); per i più
recenti (80386/486) è invece possibile coinvolgere operandi di misura doppia, cioè
confrontare un registro a 32 bit (come ESI o EDI)
con una memoria di 64 bit (2 doubleword, otto locazioni). |
 | Se il valore del registro
indice è minore del
valore finale e maggiore del
valore iniziale l'istruzione non ha effetto
e consuma i tempi indicati in tabella. |
 | Se invece è esterno
all'intervallo dei limiti viene generata ed
eseguita automaticamente l'istruzione INT
05H e i tempi vanno integrati con quelli di servizio INT. |
 | L'indirizzo a cui tornare, salvato nello stack
poco prima dell'esecuzione della procedura di
servizio e recuperato al termine dalla sua IRET,
è quello della stessa istruzione BOUND,
invece di quello previsto in questi casi (cioè quello dell'istruzione
successiva). |
 | Le sue caratteristiche sono riassunte nella
seguente tabella (leggi le istruzioni
): |
BOUND
Destinazione, Sorgente
BOUND Registro, Limiti |
Puntatore Indice di Array BOUND suoi Valori Limite |
| |
|
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 |
BOUND
|
SI,[Depo03]
|
no |
13 |
10 |
7 |
no |
6 |
|
|
|
|
|
|
|
|
|
 | La tabella evidenzia che l'istruzione non
modifica alcuna flag e che ammette una
sola possibile tipologia di operandi:
 | tra registro e memoria |
|
 | La figura seguente mostra le risorse
richieste da questa istruzione in funzione degli operandi
coinvolti (leggi le
istruzioni);
da notare che, per evitare errori di compilazione, è necessario
specificare, all'inizio del sorgente, la pseudoOperazione
.386: |
|
Addr |
|
Codifica
Masm |
|
Sequenza
Bytes |
|
Istruzione |
|
|
|
|
|
|
|
|
.386 |
|
0100 |
|
12345678 |
|
78
56 34 12 |
|
Depo03 |
DD
12345678H |
| ---- |
|
---------------- |
|
----------------- |
|
------- |
---------------------- |
0104
010B |
|
62
35 00000100
62 3D 00000100 |
|
62
35 00
01 00 00
62 3D 00 01
00 00 |
|
|
BOUND
SI,[Depo03]
BOUND DI,[Depo03] |
|
 | Questa istruzione ha 2 codici operativi,
62H,
seguito da quello che tiene conto degli operandi coinvolti. |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|