Assembleur Z80 - Comparaison
Bonsoir à tous,
Cela faisait longtemps que je n'avais plus écrit d'article sur le Z80. Le dernier article général autour du RC2014 (Z80) date d'Octobre 2022.
Depuis, la rétro-ingénierie d'une centrale téléphonique à base de Z80 à pas mal occupé mes activités Z80.
Petit retour donc sur les bases de la programmation Z80.
Cette fois, nous allons nous concentrer sur la comparaison de valeurs.
CP: Comparaison d'octet
Même en assembleur, il est parfois nécessaire de comparer deux entiers entre 0 et 255 (soit une valeur 8 bit).
La documentation officielle manque un peu de clarté alors voici un petit complément.
Pour commencer CP arg1 permet de comparer le contenu de accumulateur (registre A) avec arg1 (soit une valeur littérale, soit contenu dans un registre).
Ainsi les instructions assembleurs
LD a, 2 ; init registre a CP 5 ; arg1
Peut s'écrire sous la forme de l'expression mathématique:
arg1 symbole_comparaison a
où symbole_comparaison peut être
- > (supérieure)
- < (inférieure)
- == (identique)
- != (différent)
CP: attribution des flags
Le résultat de la comparaison est codifiée dans les flags Z (Zero) et C (carry)
Assembleur | Modification de Flag |
---|---|
arg1 > a | C = 1 (Carry SET) |
arg1 <= a | C = 0 (Carry Reset) |
arg1 == a | Z = 1 (Zero SET) |
arg1 != a | Z = 0 (Zero Reset) |
Il est possible d'exécuter des saut/appel/retour conditionnels sur base de l'un ou l'autre des flags.
Par contre, l'accès au registre F n'est pas possible ... par contre il y a une astuce qui consiste a pousser le registre sur la pile puis le récupérer dans un autre registre (L par exemple).
Il est ensuite possible d'utiliser les outils à votre disposition pour inspecter le contenu du registre.
push af ; pousser a & f (les Flags) sur la pile pop hl ; récupérer copie de F dans L ld a, l ; a contient la copie de F out (RCIO_OUPUT), a ; envoyer le contenu sur un port.
Ressources
- Flags and conditions (james Malcom, anglais)
- Haskel Z80 CPU-Board Programming (Github MCHobby, anglais)
- Boards od Haskel Z80 DTMF central (Github MCHobby, anglais)
Écrire un commentaire