2011-07-04 3 views
3

J'essaye de convertir MOVFF 0x10, 0x15 en code machine. Le microcontrôleur est Microchip PIC 18F1220. Le manuel de référence dit:Instructions de montage au code machine

MOVFF fs,fd 

Encoding:
1er mot: 1100 ffff ffff ffffs
2ème mot: 1111 ffff ffff ffffd

La solution est:

1100 0000 0010 0000 
1111 0000 0010 0101 

Mais la solution que je reçois est

0x10 = 0001 0000 
0x15 = 0001 0101 
1100 0000 0001 0000 
1111 0000 0001 0101 

Pouvez-vous s'il vous plaît m'expliquer comment obtenir la bonne réponse?

Merci

Répondre

2

Tout est OK.

movff est une instruction de 2 mots (chaque mot a une longueur de 16 bits). Le mot d'instruction movff commence par les bits b'1100 'et suit 12 bits pour l'adresse de l'octet de la source dans votre cas 0x10.

Après cette instruction, suivez le 'mot d'instruction de destination' qui commence par b'1111 'et qui suit 12 bits pour l'adresse de destination de l'octet dans votre cas 0x15.

Si vous sautez (branchez) seulement vers 'instruction de destination', alors un nop doit être effectué.

De cette façon, il est possible d'adresser 4096 octets de RAM sous PIC18 (ce qui signifie RAM complète).

EDIT: ajouté le fichier de sortie de cas de test simple pour PIC18F1220:

--- C:\WORK\TEST\Test.asm ---------------------------------------------- 
                1:  org 0 
                2:  fs equ 0x10 
                3:  fd equ 0x15 
    000 C010  MOVFF 0x10, 0x15    4:  movff fs, fd 
    002 F015  NOP 
    004 C010  MOVFF 0x10, 0x15    5:  movff 0x10, 0x15 
    006 F015  NOP 
+0

Je ne comprends pas la partie de la NOP. –

+0

NOP est sans opération et prend un cycle d'instruction MCPU. Donc, si l'instruction initiale n'est pas exécutée, alors l'instruction suivante qui commence par b'1111 'ne fera rien. –

+0

Mais je ne comprends pas pourquoi la troisième colonne des deux mots sont 0010 au lieu de 0001? – user

Questions connexes