vous est arrivé d'avoir choisi une instruction qui est vraiment facile de voir ...
.thumb
mov r0,#10
mov r1,#10
mov r2,#10
mov r3,#10
mov r4,#10
mov r5,#10
mov r6,#10
mov r7,#10
Assemblez désassembler alors pour voir le code machine
Disassembly of section .text:
00000000 <.text>:
0: 200a movs r0, #10
2: 210a movs r1, #10
4: 220a movs r2, #10
6: 230a movs r3, #10
8: 240a movs r4, #10
a: 250a movs r5, #10
c: 260a movs r6, #10
e: 270a movs r7, #10
il y aura trois ou quatre bits selon sur le jeu d'instructions et d'instructions (bras vs pouce (et ensuite les extensions thumb2)) qui spécifient le registre. Dans ce cas, ces bits se rangent bien avec la représentation hexadécimale de l'instruction de code machine afin que nous puissions voir les 0 à 7. Pour un cortex-m3, de nombreuses instructions du pouce sont limitées à r0-r7 (impliquant un champ de 3 bits dans l'instruction) avec un ou deux pour se déplacer entre le bas et le haut, les extensions pouce2 permettent un plus grand accès au plein r0-r15 (et auront donc un champ de 4 bits dans l'instruction).Vous devriez obtenir le manuel de référence architecturale armv7m qui est associé au cortex-m3 (après avoir obtenu le manuel de référence technique de cortex-m3 et voir qu'il utilise l'architecture armv7m), vous pouvez également obtenir le plus ancien manuel de référence architectural armv5 armv6m couvre le cortex-m0 qui a beaucoup moins d'extensions thumb2 alors armv7m qui couvre le cortex-m3 m4 et m7 ont des tonnes de plus extensions thumb2.
un autre exemple qui ne prend qu'une seconde pour essayer
.thumb
mov r0,r0
mov r1,r1
mov r2,r2
mov r3,r3
mov r4,r4
mov r5,r5
mov r6,r6
mov r7,r7
mov r0,r0
mov r1,r0
mov r2,r0
mov r3,r0
mov r4,r0
mov r5,r0
mov r6,r0
mov r7,r0
Disassembly of section .text:
00000000 <.text>:
0: 1c00 adds r0, r0, #0
2: 1c09 adds r1, r1, #0
4: 1c12 adds r2, r2, #0
6: 1c1b adds r3, r3, #0
8: 1c24 adds r4, r4, #0
a: 1c2d adds r5, r5, #0
c: 1c36 adds r6, r6, #0
e: 1c3f adds r7, r7, #0
10: 1c00 adds r0, r0, #0
12: 1c01 adds r1, r0, #0
14: 1c02 adds r2, r0, #0
16: 1c03 adds r3, r0, #0
18: 1c04 adds r4, r0, #0
1a: 1c05 adds r5, r0, #0
1c: 1c06 adds r6, r0, #0
1e: 1c07 adds r7, r0, #0
Notez que les bits didnt alignent aussi bien qu'avant avec des valeurs hexagonales, ne marche pas regarder la matière au binaire pour voir les trois bits changeant de l'instruction à instruction.
dans ce cas, l'assembleur a choisi d'utiliser un module complémentaire au lieu de mov
Notes:
Encoding: Cette instruction est codée comme ADD Rd, Rn, # 0.
et
Remarques
restriction Opérande: Si un registre faible est spécifiée et H1 == 0 et H2 == 0), le résultat est imprévisible.
Tout cela plus un zillion de choses que vous apprenez lorsque vous lisez la documentation. http://infocenter.arm.com. sur l'architecture du bras gauche, puis les manuels de référence, vous devrez peut-être sacrifier une adresse e-mail. vous pouvez google bras manuel de référence architecturale et vous pouvez avoir de la chance ...
Non, ce sont des registres. Ils vivent à l'intérieur du CPU. –
Certaines architectures de processeur mappent leurs registres dans l'espace d'adressage général, mais AFAIK ARM n'en fait pas partie. Bien sûr, le numéro de registre devra être codé dans l'instruction qui utilise le registre, donc vous pouvez le considérer comme un espace d'adressage spécial (très petit) distinct de l'espace d'adressage de la mémoire. – EOF
Correct ARM n'en fait pas partie. Notez également que pour les registres GPIO, UART, etc., le processeur n'a absolument aucune idée de ce qui existe, le programmeur sait directement ou indirectement que ces adresses ont une signification et demande au processeur de les lire/écrire. Les registres cpu à usage général r0-r15 ne sont accessibles que par des instructions. –