| CPC Rulez https://cpcrulez.fr/forum/ |
|
| Calculer le modulo en assembleur ? https://cpcrulez.fr/forum/viewtopic.php?f=4&t=4821 |
Page 1 sur 1 |
| Auteur : | sPOKE [ 22 Mars 2012, 09:54 ] |
| Sujet du message : | Calculer le modulo en assembleur ? |
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. |
|
| Auteur : | hERMOL [ 22 Mars 2012, 10:26 ] |
| Sujet du message : | Re: Calculer le modulo en assembleur ? |
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. |
|
| Auteur : | sPOKE [ 22 Mars 2012, 21:29 ] |
| Sujet du message : | Re: Calculer le modulo en assembleur ? |
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 J'ai implanté les nombres 1 et 2 directement en asssembleur dans DE,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 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. |
|
| Page 1 sur 1 | Le fuseau horaire est UTC+1 heure |
| Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |
|