lis
est défini ici (http://www-01.ibm.com/support/knowledgecenter/api/content/nl/en-us/ssw_aix_53/com.ibm.aix.aixassem/doc/alangref/fixed_point_load.htm#idx175)
Extended Mnémonique lis rx, value
=> équivalent à addis rx, 0, value
. aka en charge immédiate Shifted
addis
est alors défini comme suit:
calcule une adresse à partir d'une concaténation de décalage et une adresse de base et charge le résultat dans un registre à usage général.
La "charge Déplacé immédiate" opération est décrite sur cette page (http://www.ibm.com/developerworks/library/l-ppc/):
Idéalement, lis (ce qui signifie "la charge immédiate décalée") se charge directement dans les 16 bits de poids fort de la GPR . Ensuite, tout ce qu'il reste à faire est d'ajouter les bits inférieurs.
Alors lis r1, 0x0028
est addis r1, 0, 0x0028
, en anglais: Définissez les 16 bits supérieurs du contenu du registre r1
à 0x0028.
Je pense que la définition de ori
est directe:
Ors Logiquement les 16 bits inférieurs du contenu d'un registre d'usage général avec un entier non signé de 16 bits et stocke le résultat dans un autre général Registre à usage
Dans votre exemple, ori r1, r1, 0x776F
:
En anglais: Obtenez les plus bas de 16 bits de tout ce qui est dans le registre r1
et OU avec les 0x776F (1110111 01101111
) puis rangez-le dans r1
.
donc (de ma compréhension limitée) ces deux instructions devraient former 0x0028776F
dans le registre r1
si et seulement sir1
est remis à zéro avant l'utilisation, sinon la valeur résultat final dépend de la valeur de r1
avant, étant donné que OR
conservera certaines informations.
Cela ne dépend pas du contenu original de r1; parce que le deuxième opérande de 'addis' est zéro, nous avons juste' r1 'à' (valeur << 16) + 0' –