2009-09-15 5 views
2

Je travaille sur un simulateur pour le jeu d'instructions msp430. assembleur gnu vous permettra d'encoder des instructions comme celles-ci:que font ces instructions

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

Je pense que CRR & 0x0200 va chercher de l'adresse 0x0200 effectuer la rotation puis écrire la réponse address Adresse 0x0200, correct? Mais que ferait un rra # 4? La source serait un 4 immédiat, je suppose, mais y a-t-il une destination après l'opération? L'addition # 4, # 2 assemblé 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 valides?

Répondre

5

Bien qu'il ne semble y avoir aucune référence en ligne définitive à cet effet, je suis d'accord avec l'OP que les deux instructions montrées (et plusieurs autres) ne sont probablement pas valides, même si elles sont conformes au format défini dans les fiches de données. En d'autres termes, toutes les combinaisons possibles des différentes parties constitutives d'un mot d'instruction ne sont pas valables. En particulier, de nombreuses instructions à opérande unique qui utilisent le mode d'adressage immédiat et de nombreuses instructions à double opérande qui ont un mode d'adressage immédiat pour la destination ne sont probablement pas sémantiquement viables.

Il n'y a que quelques conseils à cet effet dans la documentation, par exemple, dans le Guide de l'utilisateur, la section 3.3.7 (sur le mode d'adressage immédiat), un commentaire indique "Valable uniquement pour un opérande source. "(Et, BTW, c'est pour tous les cas de mode d'adressage immédiat, pas seulement les cas abrégés permis par le tour de génération constante R2 ou R3.)

Le fait que le désassembleur ne sait pas quoi faire avec de tels codes est aussi un autre indice (bien que ... certains désassembleurs se fassent trébucher facilement ...).

Pour l'amour de la documentation, je réunis ci-dessous quelques références utiles pour le MSP430:

+1

Le deuxième élément de la puce semble être un lien brisé. Voulez-vous dire eleceng.dit.ie/frank/msp430/msp430.pdf? – Dan

+0

@Dan - Votre question sur un lien de document google de 2 ans? –

+1

Dan: J'ai mis à jour le lien; Merci d'avoir identifié ce problème. Ramhound: oui 2 ans ;-) Bonne chose à essayer et à garder à jour, cependant. – mjv

1

Il est possible qu'ils le soient. En regardant l'ensemble des instructions sur Wikipedia, les opcodes codent le registre et diverses options. Ce n'est donc pas une simple cartographie. Il ressemble à la sortie que vous avez est peu endian, donc ceci:

fc0a: 12 10 00 02 rrc &0x0200   

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

Ce 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 est la valeur INTERVENUES au décalage dans le registre 2 de l'adresse & 0200.

Vous auriez besoin de briser les autres instructions vers le bas d'une manière similaire à comprendre pleinement.Pour l'instruction ADD, les registres/adresses source et de destination sont codés dans l'instruction 5223.

+0

C'est de cela que je parle, la question est, par exemple, pouvez-vous tourner à droite avec un seul opérande qui est une constante. Où va le résultat? Ou lorsque vous ajoutez une constante à une autre, où va le résultat? Est-ce que le calcul arrive et les drapeaux changent mais pas de sortie ou est-ce une instruction illégale depuis le début? –

+0

Lorsque j'ai utilisé d'autres jeux d'instructions, la rotation se produit sur la cible, donc oui, vous pouvez tourner à droite avec un seul opérande. L'opérande est un indicateur à l'endroit où les données que vous voulez faire tourner, et la valeur est réécrite dans cet emplacement. Il existe une meilleure version de l'ensemble d'instructions ici http://cnx.org/content/m23503/latest/ .... cela inclut l'opération physique réelle qui se produit à l'emplacement donné. –

2

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

Questions connexes