2017-08-02 4 views
0

Je me demande pourquoi attacher 'm' après le registre dans l'assemblage ARM. par exemple:Pourquoi attacher 'm' après s'être enregistré dans l'assemblage ARM?

msr cpsr, r0m 
      ^

Dans le manuel, la commande msr est définie comme suit:

MSR{cond} psr_fields, Rm 
        ^
+3

Alors qu'est-ce qui vous fait interpréter Rm dans la documentation comme signifiant 'R0m' plutôt que simplement' R0'? 'R' signifie un registre, le * m * n'est pas littéral; il identifie quel registre - 0 à 12. Si vous l'aviez essayé, vous constateriez que le code ne serait pas assemblé - le suffixe * m * est invalide, donc la question n'a aucun sens. – Clifford

+1

notez comment la syntaxe add affiche Rd, Rn, shifter operand? Ce ne sont que r0-r15, mais vous devez distinguer les deux registres dans l'instruction. Ainsi, lorsque vous regardez le code machine ci-dessus, vous pouvez placer le modèle de bits correct pour ce registre dans l'instruction. –

Répondre

5

Il est pas comme vous devez écrire réellement "m" après le nom du registre, R m est juste un sténo pour R0, R1, ... R15 ; en fait, le "m" est en italique, pour montrer qu'il est juste un espace réservé pour un nombre (et in other pages J'ai effectivement vu R n, ce qui est probablement plus clair pour qui comme moi est utilisé pour x86, où rm signifie habituellement "registre ou opérande mémoire").

Votre exemple sera en fait simplement

msr cpsr,r0 

  1. Cela ligne de principe devrait être l'idée de cette convention typographique; Pourtant, dans toutes les références msr j'ai trouvé que PC (R15) est explicitement exclu dans certaines remarques, et aussi dans certains modèles SP (R13). En général R13-15 sont quelque peu spéciales, et la documentation dit même que R15 is not really considered a general-purpose register.