Index du forum




Un petit coup de main... Vous pouvez nous aider à mettre ce site à jour: n'hésitez pas à me contacter !!!

* Connexion   * Inscription

* FAQ
Nous sommes actuellement le 29 Nov 2025, 14:02

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Calculer le modulo en assembleur ?

Modérateur: poulette73



Publier un nouveau sujet Répondre au sujet  Page 1 sur 1
 [ 3 message(s) ] 
  Aperçu avant impression Sujet précédent | Sujet suivant 
Auteur Message
sPOKE
 Sujet du message : Calculer le modulo en assembleur ?
Message Publié : 22 Mars 2012, 09:54 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 08 Fév 2012, 18:19
Message(s) : 375
Bonjour,

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
Code :
10 INPUT "nombre 1 : ";n1:POKE 40019,n1
20 INPUT "nombre 2 : ";n2:POKE 40020,n2
30 CALL 40000
40 PRINT "Modulo = ";PEEK(40021):PRINT:GOTO 10

Je mets aussi le listing BASIC, si ça peut aider un débutant.


Haut
 Profil  
 
hERMOL
 Sujet du message : Re: Calculer le modulo en assembleur ?
Message Publié : 22 Mars 2012, 10:26 
Hors-ligne
Site Admin
Avatar de l’utilisateur

Inscription : 20 Août 2007, 18:21
Message(s) : 5103
ca c'est pour un nombre d' 1 à 255

t'as cette article très intéressent d'Antoine/POW : division/modulo sur des nombres 16bits.


Haut
 Profil  
 
sPOKE
 Sujet du message : Re: Calculer le modulo en assembleur ?
Message Publié : 22 Mars 2012, 21:29 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 08 Fév 2012, 18:19
Message(s) : 375
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)

Voici donc mon adaptation de la routine de division de Quasar http://quasar.cpcscene.com/doku.php?id=iassem:calculs
que j'ai complétée afin de pouvoir récupérer le modulo.
Code :
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.


Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  Page 1 sur 1
 [ 3 message(s) ] 

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 16 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

Aller vers :  
Powered by phpBB® Forum Software © phpBB Group
Traduit en français par Maël Soucaze.