Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 104 di 198] 

    

    LOOP - Salta incondizionatamente CX volte.
     
bulletQuesta 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.
bulletIn pratica prima decrementa il valore di CX e, in funzione del risultato:
bulletse CX=0000 prosegue con l'istruzione successiva.
bulletse CX è diverso da 0000 salta all'indirizzo suggerito dall'etichetta che lo rappresenta, di solito presente nelle prossimità dell'istruzione stessa (che l'ha dichiarata) seguita da ":" (2 punti).
bulletin entrambi i casi modifica il puntatore di codice CS:IP.
bulletNaturalmente 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.
         
Attenzione ! 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)"
         
bulletIn 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).
bulletLe sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni Legenda della Tabella):
         
         LOOP Destinazione  Salta alla locazione se il registro CX non contiene zero
 

Esempio di Applicazione

Cicli di Clock Mem
Acces

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
         
bulletLa 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.
Attenzione ! 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!
         
bulletL'istruzione esercita il compito di 2 istruzioni, cioè equivale all'esecuzione del seguente codice:
Ciclo:    ..........
          DEC  CX
          JNZ  Ciclo
FineCiclo:..........
bulletDi 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):
          

Addr 

 Codifica Masm 

 

 Istruzione                  

0100


0103
0104
0105


0107
B9 0064


90
90
E2 FC


90
 
;---------
          
Ciclo:   

          
          

;---------
          
          
      MOV   CX,100
-------------------------------
; servizio registro CX non zero
      NOP                      
      NOP                      

      LOOP Ciclo            
-------------------------------
; servizio registro CX azzerato
      NOP                      
          
bulletSe 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
          

Addr 

 Codifica Masm 

 

 Istruzione                  

0100
0102
0103


0104
E2 02
90
90


90
 


;---------
          
Ciclo:   
     LOOP  Ciclo
     
NOP
      NOP

-------------------------------
; servizio registro CX non zero
      NOP                      

    

Pagina Precedente Scheda n° 07 Pagina Successiva Istruzioni Cpu 80x86 Torna al Menu delle Schede del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
Istruzione 104 - LOOP

    

SCHEDE » 1.Header EXE 2.PseudoOp MASM 3.Differenza tra Macro e Procedure
4.
Tabella Vettori 5.PSP 6.Stack 7.Istruzioni 80x86
8.La misura dell'Informazione 9.Numeri e Logica Binaria
TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati