#include <REG505L.inc>
;-------------------------------------------------
; Extern geheugen vullen met nummers
;-------------------------------------------------
mov dph, #018h
mov dpl, #00h
mov A, #00h
vullen:
movx @dptr, A ;Schrijf Accumulator naar @dptr
inc dpl ;Schuif datapointer een plaats op
add A,#1d ;Voeg 1 aan A toe (Geen INC gebruiken omdat INC geen carry genereert)
jnc vullen ;Jump terug naar vullen als carry niet geset is
clr C ;Carry terug op nul zetten
;-------------------------------------------------
; Elimineren van niet priem getallen
;-------------------------------------------------
;1 is geen priemgetal --> Verwijderen
mov dpl, #01h
mov A, 0
movx @dptr, A
mov R0, #02h ;Start waarde (2) in R0 plaatsen
elimineer:
mov dpl, R0 ;R0 in DPL plaatsen
movx A, @dptr ;Gegevens uit extern geheugen halen naar Accumulator
jz vermeerder ;Sla over en vermeerder R0 als Accumulator leeg is
doorloop:
mov A, dpl ;Plaats dpl in accumulator
add A, R0 ;Voeg R0 toe aan waarde in accumulator
jc vermeerder ;Als er een carry gegenereert wordt, vermeerder R0
mov dpl, A ;Plaats Accumulator terug in datapointer
clr A ;Leeg A
movx @dptr, A ;Schrijf 0x00 (Accumulator) naar datapointer
jmp doorloop ;Herhaal "doorloop"
vermeerder:
clr C
inc R0 ;Vermeerder waarde in R0 met 1
cjne R0, #0FFh, elimineer ;Jump naar elimineer als R0 != 0xFFh
end ;Indien niet, stop programma