Tutorial |
Dettaglio Istruzioni |
Istruzioni della Cpu 80x86 |
SCHEDA n° 07 [I/ 104 di 198] |
|
|
Questa istruzione esegue un numero CX di salti non condizionati ad una specifica locazione; il salto viene dunque eseguito solo se il registro CX è diverso da 0, praticamente in modo opposto alla JCXZ, che invece salta all'etichetta se CX=0. | |||||||
In pratica prima
decrementa il valore di CX e,
in funzione del risultato:
| |||||||
Naturalmente perchè sia significativa bisogna predisporre in CX un numero compreso tra 0 e 65535 (=216); con 80386/486 il registro di riferimento diventa ECX, per cui il range diventa a 32 bit. |
Fai attenzione: i salti sono sempre di tipo corto (Short), cioè rispetto alla posizione in cui vengono richiesti, possono puntare le istruzioni poste 127 locazioni in avanti o 128 indietro. Un errore frequente, nelle prime esperienze di programmazione è proprio quello di inserire troppe istruzioni tra il punto di partenza e il punto di arrivo del salto: in queste occasioni l'assemblatore segnala l'errore "error A2053: Jump out of range by nnn byte(s)" |
In realtà i processori dal 80386.consentono salti di tipo near (vicino), cioè nel range 32767 in avanti e 32768 indietro; se viene specificata la pseudoOperazione .386, l'assemblatore non segnala errore e codifica l'istruzione nel modo più corto possibile (anche short se è possibile). | |
Le sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni ): |
LOOP Destinazione | Salta alla locazione se il registro CX non contiene zero | |||||||||||||||
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 | ||
LOOP |
etichetta |
17 | 8 | 11 | 7 | no | 2 | |||||||||
5 | 4 | 5 | 6 | no |
La tabella mette in evidenza che in presenza di salto (prima riga) è necessario un numero maggiore di cicli di Clock, anche perchè il processore è costretto a reinizializzare la coda dell'istruzione al fine di assumere i codici operativi dell'istruzione a cui cedere il controllo (evidentemente non consecutiva a quella che richiede il salto..); se il salto non viene eseguito i tempi d'esecuzione (seconda riga) sono più rapidi. |
Fai attenzione: il numero caricato in CX è quello dei giri (loop, cicli) che si desidera fare; non dimenticare che l'istruzione prima decrementa CX e poi, eventualmente, salta: per questa ragione se, per errore (o coscientemente..) carichi CX con 0000 il programma sembra bloccarsi. Per forza! l'hai obbligato a fare 65535 giri! |
L'istruzione esercita il compito di 2 istruzioni, cioè equivale all'esecuzione del seguente codice: |
Ciclo:
.......... DEC CX JNZ Ciclo FineCiclo:.......... |
Di solito il salto si esegue indietro: l'istruzione è codificata con 2 bytes (il codice operativo E2 seguito da un byte con segno); quando viene eseguita preleva il dato e lo somma algebricamente al valore del puntatore IP all'istruzione successiva; nell'esempio 0107 + FC = 105 - 4 = 0103 (leggi le istruzioni): |
|
Se il salto fosse eseguito in avanti (evento piuttosto raro..) quando viene eseguita preleva il dato con segno e lo somma ancora algebricamente al valore del puntatore IP all'istruzione successiva; nell'esempio 0102 + 02 = 105 + 2 = 0104. |
|
|
Scheda n° 07 | Istruzioni Cpu 80x86 | |||||||
Istruzione 104 - LOOP |
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|