Veuillez consulter cette page à partir de l'interface principale.
version 2012-10-04

EZH : Extrait un demi-mot et remplit ses bits de poids fort avec des Zéros

Cette instruction sélectionne un demi-mot (16 bits) du registre source pour le mettre dans les bits de poids faible du registre destination. Les bits de poids fort sont mis à zéro car la donnée est considérée comme non signée. C'est en quelque sorte l'équivalent de SHR mais EZH travaille avec une granularité d'octets et non des bits, comme sur le diagramme suivant :

Cette instruction est typiquement utilisée lors du chargement d'un demi-mot non signé de la mémoire vers un registre, car elle effectue l'alignement et le remplissage des bits de poids fort en un seul cycle. La mémoire est cependant accédée au travers des registres, un mot à la fois et cette instruction ne fait qu'ajuster le mot obtenu.

Normalement, les demis-mots viennent d'un registre D (qui contient une donnée venant de la mémoire), l'indice du premier octet à sélectionner est fourni par un registre A (l'adresse de la donnée lue) mais n'importe quel registre est utilisable. Il est aussi possible de fournir un indice directement avec une valeur immédiate (Imm4 ou Imm16), c'est pourquoi l'indice est écrit en premier dans l'instruction.

; charge 16 bits situés à l'adresse 321h dans le registre R1 :
MOV 321h A1
EZH A1 D1 R1

Pour l'instant cette instruction est disponible uniquement avec les formes RRR et iRR même si d'autres sont possibles.

Cette instruction traite des mots de 16 bits mais le YASEP32 a une granularité d'octets, ce qui permet certains accès non alignés. Cependant, tous les alignements ne peuvent pas être ajustés : si les deux bits d'indice contiennent 11 alors le bit de Carry est mis à 1 pour indiquer que du code supplémentaire doit s'occuper de charger l'octet de poids fort. Les bits de poids fort sont mis à Zéro pour faciliter la combinaison avec une instruction OR ou IB :

; charge 16 bits situés à l'adresse 123h dans le registre R1 :
MOV 123h A1  ; cette adresse a les 2 bits de poids faible à 1
EZH A1 D1 R1 ; donc le bit retenue est mis à 1
; Traitement de l'octet sur le mot suivant :
ADD 1 A1      CARRY ; accède au mot suivant
IB 1 D1 R1    CARRY ; insère le premier octet en 2è position

• L'instruction EZB est similaire mais travaille avec des octets non signés.

• L'instruction ESH est similaire mais travaille avec des demi-mots (16 bits) signés (et la gestion des demis-mots non alignés prend plus d'instruction).