; num_primi.asm

Dati    SEGMENT 
N       DW ?      ; numero di cui va controllata la primalità 
Primo   DB ?      ; esito del test - 1 primo, 0 non primo 
Dati    ENDS 
 
Codice  SEGMENT 
     
Inizio: MOV AX,Dati  ; setta il segmento dati a puntare alla corretta zona 
        MOV DS,AX 
 
        MOV CX,N     ; inizializza il contatore di ciclo (da n-1 a 2) 
         
        CMP CX,2d    ; se è 2 è primo 
        JE EPrimo 
         
        DEC CX    
         
Ciclo: 
        MOV AX,N     ; pone come dividendo n  (coppia DX:AX) 
        MOV DX,0h 
 
        DIV CX       ; divide il dividendo per CX 
        CMP DX,0h    ; controlla se il resto, ossia se DX:AX e' divisibile per ECX 
        JE Non_Primo  ; se è divisibile esce dal ciclo di controllo 
                      ; (il numero n non è primo) 
 
        DEC CX       ; effettua un nuovo test con il numero inferiore 
        CMP CX,1d    ; se è pari a 1 esce dal ciclo di test... 
        JNE Ciclo 
         
EPrimo:         
        ; se il programma è arrivato qui nessun divisore è stato trovato 
        MOV Primo,1d 
        JMP Fine 
Non_Primo: 
        ; nel caso in cui non sia primo, allora ris viene posta a 0 
        MOV Primo,0d  
Fine:         
        MOV AH,4Ch 
        INT 21h 
Codice  ENDS  
 
END Inizio