
Dati   SEGMENT
Vett     DB 3,6,2,5,0,4,1,8,9,7
Aus      DB ?
Scambio  DB ?
Dati   ENDS

Codice SEGMENT

Inizio:    
     MOV AX,Dati     ; fa' puntare DS al segmento Dati
     MOV DS,AX
             
     LEA BX,Vett        
RipetiCiclo:            
     MOV Scambio,0d
     MOV SI,0h 
CicloScan:     
     MOV AL,Byte Ptr[BX + SI]
     MOV AH,Byte Ptr[BX + SI + 1]
     CMP AL,AH
     JBE NonScambia
     ; in questa parte effettua lo scambio tra due 
     ; locazioni contigue, utilizzando i valori gia' immagazzinati
     ; nei registri AL e AH
     MOV Byte Ptr[BX + SI],AH
     MOV Byte Ptr[BX + SI + 1],AL
     
     MOV Scambio,1d   ; setta il flag che indica lo scambio effettuato
NonScambia:     
     INC SI         ; sposta il puntamento sul vettore in aventi di 1  
     CMP SI,9d        ; avanza fino all'elemento 8 (nono elemento)
     JB CicloScan       ; se SI e' inferiore a 9 continua
     
     ; alla fine della scansione controlla se c'e' stato scambio     
     CMP Scambio,1d  
     JE  RipetiCiclo   ; se si',allora ripete la scansione
                       ; (= vettore non ancora ordinato)
                       
     MOV AH,4Ch     ; ritorno al DOS
     INT 21h    
Codice ENDS       

END Inizio 