« Programmation Assembleur Z80/Jeu d instructions » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 609 :
 
Il est possible de lire ou d'écrire sur un port mémoire. Cette section ne sera pas détaillée car les opérations d'entrée/sortie sont spécifiques au matériel avec lequel est connecté le Z80. Pour la petite anecdote, sur l'Amstrad CPC, les ingénieurs ont inversés les bits de poids fort avec les bits de poids faible du port d'entrée/sortie par économie, rendant inutilisables toutes les fonctions entrée/sortie de répétition qu'offre le Z80. Le processeur Z80 est conçu pour un design qui utilise le port pointé par le registre C alors qu'Amstrad a créé un design qui utilise le registre B pour pointer le port. Comme les instructions de répétition utilisent le registre B comme compteur, il faut pouvoir réajuster le registre B à chaque itération.
==== OUT ====
 
Le OUT est l'instruction élémentaire pour envoyer une donnée sur un port I/O. Elle ne s'utilise qu'avec les registres 8 bits non spéciaux.
OUT (C),A ; envoyer la valeur du registre A sur le port C
OUT (C),B
Ligne 620 ⟶ 621 :
OUT (im8),A ; envoyer A sur le port im8
 
==== OUTI ====
Les instructions suivantes sont des instructions groupées
Cette instruction est une instruction groupée d'envoi de donnée depuis le tableau pointé par HL avec une post-incrémentation.
 
OUTI ; décrementer B*, envoyer la valeur de (HL) sur le port C, incrémenter HL
Il est important de noter que le registre B est décrémenté AVANT d'envoyer la valeur de (HL) sur le port, comme on peut le lire dans beaucoup d'ouvrages. L'ordre a une importance car comme sur l'Amstrad le port de sortie est le port B, si on veut envoyer une valeur sur le port B, il faut envoyerla B+1 comme valeurpré-incrémenter!<br>
OUTD ; idem mais avec décrémentation de HL
* Le flag P/V est mis à zéro si BC vaut zéro après l'appel à OUTI.
OTIR ; instruction avec répétition tant que B>0
==== OTIR ====
OTDR ;
Cette instruction répète le OUTI tant que BC est supérieur à zéro.
* Le flag P/V est mis à zéro en fin d'itération.
==== OUTD ====
Cette instruction est une instruction groupée d'envoi de donnée depuis le tableau pointé par HL avec une post-décrémentation.
OUTI ; décrementer B*, envoyer la valeur de (HL) sur le port C, décrémenter HL
Il est important de noter que le registre B est décrémenté AVANT d'envoyer la valeur de (HL) sur le port comme on peut le lire dans beaucoup d'ouvrages. L'ordre a une importance car comme sur l'Amstrad le port de sortie est le port B, si on veut envoyer une valeur sur le port B, il faut la pré-incrémenter!
* Le flag P/V est mis à zéro si BC vaut zéro après l'appel à OUTI.
==== OTDR ====
Cette instruction répète le OUTD tant que BC est supérieur à zéro.
* Le flag P/V est mis à zéro en fin d'itération.
 
Il est important de noter que le registre B est décrémenté AVANT d'envoyer la valeur de (HL) sur le port, car comme sur l'Amstrad le port de sortie est le port B, si on veut envoyer une valeur sur le port B, il faut envoyer B+1 comme valeur!<br>
 
==== IN ====
C'est l'instruction élémentaire pour lire une valeur sur le port I/O. Elle ne s'utilise qu'avec les registres 8 bits non spéciaux.
IN A,(C)
IN B,(C)
Ligne 638 ⟶ 650 :
IN 0,(C)
IN A,(im8)
 
==== INI ====
==== INIR ====
==== IND ====
==== INDR ====
 
=== Instructions de gestion des interruptions ===