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