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