2015-10-24 3 views

Répondre

1

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 r1si 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.

+1

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' –