; num_primi_elenco.asm

 
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