Veuillez consulter cette page à partir de l'interface principale.
version 2011-09-20

SAR : décalage arithmétique à droite (division signée par une puissance de 2)

Les bits du registre source (snd) sont décalés en direction des bits de poids faible. La position du décalage est indiquée par

Les bits de poids fort sont répliqués, afin de préserver le signe des nombres en complément à 2. Le décalage logique (SHR) met les bits de poids fort à 0.

Dans les exemples suivants, nous considérons que nous effectuons un décalage de deux positions, soit une division par 2^2=4. Pour un YASEP16, le mouvement des bits peut être schématisé ainsi :
Pour YASEP32 c'est identique, mais avec 32 bits au lieu de 16.

Supposons que le registre R1 est chargé avec la valeur 0110110110110110b, soit 28086 en décimal. L'opération de décalage signée peut être écrite ainsi 

mov 0110110110110110b r1
sar 2 r1
28086/4=7021, ce qui correspond au résultat binaire 0001101101101101b.

Contrairement à SHR cette instruction préserve le bit de signe si on travaille avec des nombres entiers signés. Par exemple avec la valeur 1101101101101101b, qui correspond à -9363, le décalage signé donne ce résultat :

-9363/4=-2340, soit quasiment 1111011011011011=-2341
Le décalage à droite arrondit à l'excès pour les nombres négatifs, mais SAR ne sert pas qu'aux divisions.