Instructions de comparaisonCP L'instruction CP est en logique interne une soustraction du registre A qui ne met pas le registre A à jour. Seuls les flags sont positionnés en fonction du résultat de cette soustraction. CP im8 ; comparer A avec la valeur immédiate im8 CP reg8 ; comparer A avec le registre 8 bits reg8 CP (HL) ; comparer A avec la valeur mémoire 8 bits à l'adresse HL CP (IX+d) ; comparer A avec la valeur mémoire 8 bits à l'adresse IX+d CP (IY+d) ; comparer A avec la valeur mémoire 8 bits à l'adresse IY+dInterprétation des flags (avec N une valeur qui est reg8, im8 ou (reg16) )- Si A=N alors Z=1
- Si A!=N alors Z=0
- Si A<N alors C=1
- Si A>=N alors C=0
- Si A-N<0 alors S=1 (bit 7 du résultat copié dans S)
- Si A-N>=0 alors S=0
Alternatives à l'instruction CP Pour certaines comparaisons simples (-1, 0 ou 1) il est possible d'utiliser des instructions plus rapides dont l'usage premier n'est pas la comparaison mais pour lesquelles le Z80 va réaliser quelques tests. OR A ; comparer à zéro, ne modifie pas le registre INC A ; Si A vaut 1 alors le flag Z sera positionné. Le registre A est modifié DEC A ; Si A vaut 255 alors le flag Z sera positionné. Le registre A est modifié ...Comparaisons 16 bits OR A ; efface la retenue sans modifier le registre A SBC HL,DE ; Le registre HL est modifé par la soustraction avec retenue- Si HL=DE alors Z=1
- Si HL!=DE alors Z=0
- Si HL<DE alors C=1
- Si HL>=DE alors C=0
- Si HL-DE<0 alors S=1
- Si HL-DE>=0 alors S=0
CPI Cette instruction est une instruction de comparaison groupée. L'instruction est équivalente au pseudo-code suivant : CP (HL) ; compare le registre A avec la valeur 8bits à l'adresse HL INC HL ; incrément HL DEC BC ; décrémente BC ; certains flags sont modifiés par l'instructionSi BC=0 après exécution de l'instruction, alors le flag P/V est mis à 0.CPIR Cette instruction est une répétition de l'instruction CPI tant que BC est plus grand que zéro ou que le registre A est différente de la valeur pointée par HL. Par exemple, pour trouver la première occurrence de A en mémoire, on peut écrire. LD A,#55 ; valeur qu'on veut chercher LD HL,montableau LD BC,1024 ; taille maximum du tableau CPIR DEC HL ; pour avoir l'adresse de l'occurrence, il faut décrémenter HL car il est systématiquement incrémenté après chaque comparaison.Après exécution le flag P/V est à 0 si on n'a trouvé aucune valeur OU que la valeur est la dernière du tableau. Il faut donc la tester!CPD / CPDR Ces instructions sont les versions de CPI/CPIR mais avec une décrémentation de HL pour effectuer une recherche dans l'ordre inverse de la mémoire. Roudoudou CPCrulez[Content Management System] v8.732-desktop Page créée en 205 millisecondes et consultée 18 foisL'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko. |
|