
Dati    SEGMENT
N       DW ?           ; numero da cui individuare i primi
Primi   DB 1000 DUP(?)   ; vettore dei primi individuati     
Dati    ENDS    
             
             
Codice  SEGMENT
            
        ; BX - contatore che determina su quale numero va svolto il
        ; test di primalità
Inizio: 
        MOV AX,Dati
        MOV DS,AX       
        
        MOV DI,0h
        
        MOV BX,N
Ciclo3:          
        MOV CX,BX    ; imposta il contatore CX come il numero corrente - 1
        DEC CX
Ciclo2:
        ; il dividendo viene posto a BX, ossia il numero sotto test corrente
        MOV AX,BX
        MOV DX,0h

        DIV CX        ; controllo della divisibilità di BX per CX
        CMP DX,0h
        JE Non_Primo2

        ; ciclo che imposta un divisore successivo
        DEC CX
        CMP CX,1d
        JA Ciclo2

 ; memorizza in locazioni progressive (di Primi)
 ; i numeri che sono risultati primi        
        MOV Word Ptr[Primi + DI],BX                                    
        INC DI        
        
Non_Primo2:
        DEC BX    ; ciclo che imposta il test per un numero successivo...
        CMP BX,1h
        JNE Ciclo3
        
        MOV AH,4Ch  ; uscita al sistema operativo
        INT 21h       
        
Codice  ENDS 

END  Inizio  