Voici comment je calcule le modulo d'un nombre. Ca marche très bien, mais je voulais savoir si l'un d'entre vous a une formule plus rapide, plus concise, ou le fait d'une manière différente en assembleur.
Code :
ORG 40000 LD IX,nombre1 LD A,(IX,0) soustr SUB (IX+1) CP (IX+1) JR NC,soustr LD (IX+2),A RET nombre1 DEFB 0 nombre2 DEFB 0 resultat DEFB 0
Ma première routine 8 bits ci-dessus est sympa, mais elle boucle beaucoup. Ca reste très rapide, c'est de l'asm, et ce sont des nombres sur 8 bits seulement, mais 255 modulo 2 va boucler plus de 120 fois... On peut faire ça en 8 boucles, par décalage de bits. (C'est ce que je cherchais avant de poster ce topic)
LD DE,#05C8 ; 200 modulo 5 LD B,8 XOR A LD C,A boucle SLA E RLA CP D JR c,saut SUB D saut CCF RL C DJNZ boucle LD IX,resultat LD (IX+0),C ; stocke le résultat de la division LD (IX+1),A ; stocke le modulo RET resultat DEFB 0
J'ai implanté les nombres 1 et 2 directement en asssembleur dans DE, mais ça peut se faire avec le listing BASIC vu plus haut.
Pour ceux qui veulent travailler avec des nombres sur 16 bits, l'exemple fourni par l'ami hERMOL est très bien, ou toute autre division par décalage sur 16 bits.
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 15 invité(s)
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum