« Programmation Assembleur Z80 » : différence entre les versions

Contenu supprimé Contenu ajouté
m →‎Les registres : à delete par un admin car l'article est dans une sous-page en lien
→‎Les registres : Déplacé en sous-page
Ligne 9 :
 
== [[Programmation_Assembleur_Z80/Registres|Les registres]] ==
 
ne garder que le lien vers la page (ci-dessus) et pas tableau+texte ci-dessous
 
Le Z80 contient 13 registres 16 bits dont certains sont accessibles directement en 8 bits:<BR>
AF, BC, DE, HL, IX, IY, SP, PC, IR ainsi qu'un jeu secondaire de registres généraux AF', BC', DE', HL'.<BR>
À part SP (stack pointer ou pointeur de pile), PC (program counter ou pointeur d'instruction courante), tous les registres sont accessibles en 8 bits, que ce soit le poids fort (bits 8 à 15) ou le poids faible (bits 0 à 7).<BR>
 
{| class="wikitable"
! registre 16 bits !! poids fort !! poids faible
|-
| PC || ||
|-
| SP || ||
|-
| IX || XH || XL
|-
| IY || YH || YL
|-
| AF || A || F
|-
| BC || B || C
|-
| DE || D || E
|-
| HL || H || L
|-
| AF' || A' || F'
|-
| BC' || B' || C'
|-
| DE' || D' || E'
|-
| HL' || H' || L'
|-
| || I || R
|}
Certains registres ne peuvent être adressé directement, il faut utiliser des instructions de changement de contexte ou spécifiques au registre.
 
Pour adresser les 8 bits de poids fort ou de poids faible, on utilise directement les lettre A,B,C,D,E,H,L,I ou R
Ainsi, BC=B*256+C, DE=D*256+E, etc.<br>
Les registres IX et IY n'ont pas de convention de nommage officielle. Les assembleurs utilisent différentes notations (voir toutes) comme XL,LX,IXL,LIX (pour IX low, de poids faible) et XH,HX,IXH,HIX pour le poids fort du registre IX.<br>
On peut noter aussi qu'il n'existe pas d'instruction pour lire le registre F. On peut l'écrire de façon détournée avec un POP AF (écrire la valeur dans la pile et récupérer les flags de la pile).<BR>
Les registres alternatifs ne sont pas accessible directement, il faut passer d'une page de registres à l'autre grâce aux instructions EX AF,AF' pour échanger AF par AF', et EXX pour l'échange des registres BC, DE, HL. Ceci permet d'utiliser deux contextes (cette méthode étant plus rapide qu'une sauvegarde dans la pile) ou virtuellement plus de registres pour un seul programme.<BR><BR>
 
* Le registre A est l'accumulateur 8 bits tandis que HL est l'accumulateur 16 bits. L'usage de ces instructions est parfois exclusif à certaines opérations, et presque toujours plus rapide que l'utilisation d'instructions équivalentes avec les autres registres.<BR>
* Le registre BC est utilisé comme compteur pour les instructions de répétition (LDIR,LDDR,OTIR,OTDR,CPIR,CPDR et leurs variantes non R). Il sera décrémenté en 16 bits à chaque itération.
* Le registre B est utilisé comme compteur 8 bits avec l'instruction de bouclage DJNZ (saute si non zéro). Il sera décrémenté à chaque itération sans modifier les flags.
* Le registre HL est utilisé comme adresse source par les instructions de répétition (copie, ports, comparaisons)
* Le registre DE est utilisé comme adresse (DE)stination par les instructions de répétition (copie exclusivement)
* F est le registre contenant les "Flags" (drapeaux en anglais): il contient entre autres les résultats des opérations.<BR>
* IX et IY sont des registres spécialisés dans l'indexage mais on peut les utiliser comme les autres, à un détail près que leur utilisation est plus coûteuse en temps machine.<BR>
* SP (stack pointer) est l'adresse du haut de la pile de donnée et d'appels dans la RAM.<BR>
* PC (program counter) est l'adresse de l'instruction en cours d'exécution.
* R est le registre de rafraichissement mémoire. Il est incrémenté de 1 ou 2 unités en fonction de l'instruction lue par le processeur.<BR>
* I est utilisé pour les interruptions dans certains modes<BR>
 
En règles générales on utilise surtout A,BC,DE,HL en programmation car très peu d'opérations sont possibles sur les autres registres.<BR>
 
== [[Programmation_Assembleur_Z80/Jeu_d_instructions|Jeu d'instructions]] ==