2017-06-01 3 views
0

Ma question est spécifique aux microcontrôleurs M3 à cortex de bras. Chaque périphérique du micro-contrôleur est mappé en mémoire et ces adresses de mémoire sont utilisées dans le traitement.Comment un compilateur/assembleur donne-t-il un sens aux registres principaux du processeur?

Par exemple,: GPIOA-> ODR = 0;
Cela écrira un 0 à l'adresse 0x4001080C. Cette adresse est définie dans le fichier spécifique du micro-contrôleur.

Maintenant, le cortex M3 a des registres de coeur de processeur R0-R12 (usage général). Je veux savoir, ces registres ont-ils aussi une adresse comme les autres périphériques? Donc, si j'ai une instruction: MOV R0, # 10;
R0 sera traduit à une adresse une fois assemblé? Les registres centraux ont-ils des adresses numériques spéciales exclusives aux périphériques de base? Est-ce que l'adresse de R0 est définie dans n'importe quel fichier (je n'en trouve pas) comme celui de GPIOA? Ou est-ce que le registre R0 et les autres registres de base sont appelés R0 et leurs noms respectifs uniquement pour que l'assembleur voit "R0" et génère l'opcode à partir de lui?

J'ai cette confusion parce que certains contrôleurs 8 bits ont aussi des adresses pour les registres à usage général.

Merci,
Navin

+0

Non, ce sont des registres. Ils vivent à l'intérieur du CPU. –

+3

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

+1

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. –

Répondre

1

registres comme R0-R12 ou SP, PC, .. sont des registres à l'intérieur du noyau CPU et ils ne sont pas mis en correspondance à l'espace d'adresses globale. L'accès à ces registres n'est possible que depuis l'assembleur.

De plus, l'accès direct aux registres centraux à partir de langages de plus haut niveau comme C n'est pas possible, car ils ne sont pas adressables. Ces registres sont utilisés pour le traitement interne et ils sont transparents pour le programmeur.

Mais les registres comme GPIOA-> ODR sont mappés à l'espace d'adressage global, donc chaque registre a sa propre adresse.

0

Les registres d'usage général sont destinés à effectuer des opérations générales avec la CPU. C'est comme si nous utilisions quelques variables temporaires dans n'importe quel langage de programmation. Donc, si nous établissons un lien entre ceci et votre question, le processeur nécessite quelques segments de mémoire réservés pour effectuer ses opérations de base. Par conséquent, il est inutile de partager cela avec le monde extérieur. C'est ainsi que fonctionnent les processeurs basés sur ARM.

0

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 ...