Bonjour tout le monde,
J’ai créé un petit programme en assembleur pour calculer les nombres premier (mon premier ). J’ai choisi d’utiliser NASM comme compilateur (il me paraît plus simple et n’est pas fait par Billou :paf: ).
Quand je place (juste la partie du “vrai” code de mon programme) dans VC++.net ou VC++6 je récupère bien les nombres premiers mais quand je place tout le code dans NASM il me met une erreur à l’écran de ce type “Dépassement de division”…
Alors voici mon programme (j’espère que je l’ai bien commenté):
[BITS 32]
[ORG 0x0100]
[SECTION .data]
NombMaxi EQU 80000
[SECTION .text]
; Initialisation tous les registres à 0
XOR EAX, EAX
XOR EBX, EBX
XOR ECX, ECX
XOR EDX, EDX
;Initialise le premier nb à scanner
MOV ECX, 1
SuiteScan:
;Incrémentation le nombre à scanner
INC ECX
;Copiage du nombre à analyser dans EBX
MOV EBX, ECX
SuiteDuScan:
;Enregistrement de test de la division (oublie le nb à tester)
MOV EAX, ECX
;Essaye de diviser le nombre par un nombre un peu plus petit
DEC EBX
;Test si le diviseur (dans EBX) contient un nombre plus grand que 1
CMP EBX, 2
JL IsAPrem
;Effectue la division
XOR EDX, EDX
DIV EBX
;Test si un reste existe (dans EDX)
CMP EDX, 0
;Si aucun reste existe alors on passe au prochain diviseur
JE ProchNb
;Test si le diviseur (dans EBX) contient un nombre plus grand que 1
CMP EBX, 2
JL IsAPrem
;Passe au prochain diviseur
JMP SuiteDuScan
IsAPrem:
;Doit montrer le nb premier à l'écran
;Passe au prochain nombre ( /!\et pas au prochain diviseur /!\)
JMP ProchNb
;Label utilisé pour vérifier si on a testé le dernier nombre et sinon
;passer au prochain nombre
ProchNb:
;Test si le dernier nombre a été atteint
CMP ECX, NombMaxi
JE Fin
JMP SuiteScan
;Fin du programme
Fin:
ret
Es-ce-que qqun a une explication de cet erreur sous NASM?