1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
SECTION .data
extern printf
global debug
msg db ' %d',10,0
msg2 db 'dernier diviseur => %d',10,0
SECTION .text
debug:
mov eax, [esp + 4] ; notre nombre n est dans eax
mov ebx,2 ; on commence notre recherche par le premier nombre premier
jmp debut
debut:
cmp eax,ebx
je fin ; si les 2nombres sont egaux rien a faire je = jump if equal
cmp ebx,eax ; si diviseur
jng boucle ; < a notre nombre alors on commence a cherche les facteurs
jmp fin
boucle:
div ebx ; on divise eax par ebx
mov ecx,edx ; on recupere le reste dans ecx
mul ebx ; on remet n (eax) a sa valeur de depart
add eax,ecx ; on ajoute le reste de la division qui manqué
mov edx,0 ; pour tester si le reste est egal a 0
cmp ecx,edx ; si le reste est egal a 0 on a trouve un facteur premier
je division ; on continue donc
inc ebx ; sinon on incremente ebx
jmp debut ; et on recommence la boucle
division:
push ebx ; on affiche le premier facteur premier qui est ebx
push msg
call printf
pop ebx
div ebx
mov ebx,2 ; la division a marché on remet le diviseur a 2
jmp debut ; on retourne au debut
fin:
push eax
push msg2
call printf ; on affiche le dernier diviseur |
Partager