Question

Je travaille sur un simulateur pour le jeu d'instructions msp430. L'assembleur GNU vous permettra de coder des instructions comme celles-ci:

fc0a: 12 10 00 02 rrc &0x0200       
fc0e: 22 11       rra #4        
fc10: 23 52       add #4,#2

Je suppose que rrc & 0x0200 ira chercher à l'adresse 0x0200, effectuera la rotation puis inscrira la réponse à l'adresse 0x0200, n'est-ce pas? Mais que ferait un rra # 4? La source serait un 4 immédiat, je suppose, mais y at-il une destination après l'opération? Les add # 4, # 2 réunis dans ce que vous attendez (comme 2b10, source = r2, ad = 1b0, dest = r3), le désassembleur binutils ne savait pas quoi faire avec cette instruction.

Ces instructions sont-elles valables?

Était-ce utile?

La solution

Bien qu'il ne semble pas y avoir de référence en ligne définitive à cet effet, j'ai tendance à être d'accord avec le PO que les deux instructions affichées (et plusieurs autres) ne sont probablement pas valables , même si ils sont conformes au format défini dans les fiches techniques.

En d'autres termes, toutes les combinaisons possibles des différentes parties composant un mot d'instruction ne sont pas valides. En particulier, de nombreuses instructions à un seul opérande utilisant le mode d'adressage immédiat, et de nombreuses instructions à deux opérandes ayant un mode d'adressage immédiat pour la destination ne sont probablement pas sémantiquement viables.

Il existe seulement quelques astuces à cet effet dans la documentation. Par exemple, dans le Guide de l'utilisateur, section 3.3.7 (en mode d'adressage immédiat), un commentaire indique que "" n'est valide que pour un opérande source . " (Et, BTW, il s’agit de tous les cas de mode d’adressage immédiat, et pas seulement des cas abrégés autorisés par l’astuce de génération constante R2 ou R3.)

Le fait que le désassembleur ne sache pas quoi faire avec de tels codes est également un indice (bien que ... certains désassembleurs se déclenchent facilement ...).

Par souci de documentation, j'ai rassemblé ci-dessous quelques références utiles pour le MSP430:

Autres conseils

Dans le guide de l'utilisateur actuel, dans la section 3.4.4.2, il est recommandé de ne pas utiliser le mode immédiat (#N) dans le champ de destination de la commande RRA car cela entraîne un "programme imprévisible".

Il est possible qu'ils le soient. En regardant le jeu d'instructions sur Wikipedia, les opcodes encodent le registre et diverses options. Ce n'est donc pas une simple cartographie. Il semble que la sortie que vous avez est un peu en endian, donc ceci:

fc0a: 12 10 00 02 rrc &0x0200  

correspond à l'instruction 1012 qui, en binaire, est 0001 0000 0001 0010.

Cela se décompose comme suit:

6 bits: 0001 00 - fixed; defines the instruction family
3 bits: 00 0    - instruction (RRC)
1 bit : 0       - byte or word parameter (0 = 16 bit parameter; 1 = 8 bit)
2 bits: 01      - addressing mode (01 = indexed;)
4 bits: 0010    - register

Donc, dans ce cas, une rotation à droite se produit sur la valeur du décalage dans le registre 2 à partir de l'adresse & 0200.

Vous devez décomposer les autres instructions de la même manière pour bien comprendre. Pour l’instruction ADD, les registres / adresses de source et de destination sont codés dans le 5223 instructions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top