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

ESH : Extrait un demi-mot et étend son signe

Cette instruction sélectionne un demi-mot (16 bits) signé du registre source pour le mettre dans les bits de poids faible du registre destination. Les bits de poids fort sont la copie du bit de poids fort du demi-mot choisi, afin d'étendre son signe. C'est en quelque sorte l'équivalent de SAR mais ESH 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 signé de la mémoire vers un registre, car elle effectue l'alignement et l'extension de signe 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
ESH 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 :

; 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
ESH A1 D1 R1 ; donc le bit retenue est mis à 1
; Traitement de l'octet sur le mot suivant :
; il faut un registre temporaire R2
ADD 1 A1      CARRY ; accède au mot suivant
ESB A1 D1 R2  CARRY ; extrait le premier octet
SHL 8 R1      CARRY ; décale d'un octet
OR R2 R1      CARRY ; combine les deux octets

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

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