Inscription : 28 Mai 2010, 11:34 Message(s) : 99 Localisation : Eteauville, France
désolé si je monopolise un peu le forum en ce moment
ca pourrait être bien d'avoir une partie "design patterns" où on pourrait retrouver des idées d'implémentation optimales pour des opérations classiques.
Exemple avec les décalages sur 16 bit:
- Décalage à droite d'un bit sur bc:
sra b rr c
- Décalage à gauche d'un bit sur bc: sla c rl b
Ca reste une idée, mais je pense que ca pourrait aider pas mal les développeurs z80 débutants...
Inscription : 15 Août 2008, 13:00 Message(s) : 968 Localisation : Troyes, France
Ah oui elle pique la multiplication par 128 !
Après , pour en revenir au design patterns , je n'irai pas jusque là puisque sur CPC on brode du sur mesure mais par contre partager les tricks , c'est cool Personnellement, je n'en ai pas beaucoup à vous offrir peut être à part certaines organisation de données.
_________________ "NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)
Inscription : 26 Nov 2008, 10:04 Message(s) : 174 Localisation : Saint Ouen l'Aumône
Messieurs les codeurs expérimentés, pouvez-vous s'il vous plait, allumer la lumière de pauvres néophytes comme moi en indiquant ce qu'est censé faire votre bout de code et surtout pourquoi ?
Dans cet exemple, j'utilise BC comme compteur 16 bits pour une boucle, et HL comme pointeur sur une zone mémoire par exemple. A la fin de ma boucle, j'incrémente le pointeur mémoire (HL), je décrémente mon compteur (BC) et si celui-ci n'est pas nul, je poursuis ma boucle (le label représenté par xxxx) En gros, un code standard (non optimisé) fait comme la première version:
Code :
INC HL ; incrémente le pointeur mémoire DEC BC ; décrémente le compteur LD A,B ; test bits de poids fort compteur OR C ; test bits de poids faible compteur JR NZ,xxxx ; si BC différent de zéro, on continue
qui peut se traduire par la version optimisée :
Code :
CPI ; compare a avec (HL), incrémente HL, décrémente BC, positionne les flags JP PE,xxxx
dans le deuxième code, j'utilise les spécificités de l'instruction z80 CPI, qui permet de faire une comparaison entre A et le contenu mémoire pointé par HL. Cette comparaison ne m'est d'aucune utilité, par contre, le fait que CPI incrémente HL, décrémente BC, et positionne le flag P (parité) si BC vaut zéro est très intéressant dans mon cas Voilà, j'espère que ceci permet d'éclairer un peu sur la façon dont j'ai optimisé ma boucle.
Ah oui je profite que je suis en forme ce matin Pour le premier exemple (HL=A*128), il suffit de faire HL=(A*256)/2, donc HL=A*256 se traduit par
Code :
LD H,A LD L,0
et ensuite la division par 2 de HL :
Code :
SRA H ; rotation vers la droite avec retenue et signe de H RR L ; rotation vers la droite avec récupération de la reteneue de L
Inscription : 12 Juin 2008, 20:29 Message(s) : 1709
En fait, le mieux est de proposer un code et que l'on voit ensemble pour l'optimiser...car donner des trucs pour des trucs... alors que s'il y a vraiment un besoin de gagner du temps machine pour une boucle ou une routine ça motive !!!!
En fait, le mieux est de proposer un code et que l'on voit ensemble pour l'optimiser...car donner des trucs pour des trucs... alors que s'il y a vraiment un besoin de gagner du temps machine pour une boucle ou une routine ça motive !!!!
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 24 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