Tu parles de BRAS endian modes, ou de lire quelque chose écrit par un autre big endian processeur, etc?
Normalement la conversion de/big/little endian-vous échanger les octets environ. Donc 0xABCD est 0xCDAB lorsqu'on la considère comme un nombre sur 16 bit 0x12345678 est 0x78563412 lorsqu'on la considère comme un nombre 32 bits.
Cœurs ARM armv5 et plus (ARM7, ARM9, etc) ont une endian mode connu comme ÊTRE-32, sens big endian mot invariable. armv6 et plus récent (mpcore, cortex-somethings) ont BE-8, ou big endian octet invariant.
Donc, si vous utilisez un armv4 par exemple en big endian et en mode natif (peu) endian mode un mot lu (ldr) de la valeur 0x12345678 serait 0x12345678 pour un big endian mot lu à la même adresse. Le mot de l'invariant de sens du mot lit donner la même réponse. Un octet de lecture de l'adresse zéro en little endian mode de la même adresse serait 0x78 et big endian octet lu (ldrb) serait 0x12.
De sorte que vous avez à aller au-delà en disant: est-il grand ou petit-boutiste, mais ce que l'instruction est utilisé.
Pour un armv6 ou plus récent, si un ldr à certaines adresses résultats dans 0x12345678 puis en big endian mode de la ldr à partir de la même adresse entraînerait 0x78563412. Noter que big ou little endian mode une instruction fetch pour cette adresse, sur un armv6 ou plus récent allait chercher 0x12345678. Un ldrb little endian mode armv6 mêmes données même adresse de résultats dans 0x78, ldrb big endian armv6 ou plus récent aussi des résultats dans 0x78. c'est parce que le armv6 et plus récent octet de l'invariant de signification octet accède à la même adresse, résultat de la même valeur, halfword, la parole et le mot double accès sont échangé sur ces architectures quand en big endian mode. Parce que l'instruction extractions ne sont pas échangés, et parce que le endian peu est dans le cadre du rp, tout en exécutant un petit-boutiste du programme compilé, vous pouvez passer à big endian, faire un certain nombre d'instructions, puis retour en mode natif et il l'habitude de nuire à l'instruction extrait, ni des interruptions qui se produisent.
setend être
ldr r0,[r1]
add r0,r0,#7
str r0,[r1]
setend le
Certaines pages du site web de mentionner quatre instruction byte swap, dans le cas où vous souhaitez exécuter natif little endian (une très bonne idée) et d'effectuer le swap à l'aide de l'assembleur (pas toujours une bonne idée, dépend de ce que vous faites).
Voir si il y a un octet d'inversion de commande c'est à dire (__REV(), __REV16(), __REVSH()). Ces sont en ligne instructions de montage qui utilise le matériel à la différence de la plus lente, mais portable contourner les réponses ci-dessus. (link1, link2)
Pensez à comment vous convertir boutisme dans un langage de haut niveau comme le C, et puis quand vous comprenez que vous pouvez facilement traduire dans les BRAS de montage, par exemple
uint16_t x = 0x0102;
uint16_t y = (x << 8) | (x >> 8); //y = 0x0201
Donc pour la 16 bits de cas, vous avez deux quarts de travail (un à gauche et un à droite) et un OU. Vous devriez être capable de le faire en 3 instructions.
Tu parles de BRAS endian modes, ou de lire quelque chose écrit par un autre big endian processeur, etc?
Normalement la conversion de/big/little endian-vous échanger les octets environ. Donc 0xABCD est 0xCDAB lorsqu'on la considère comme un nombre sur 16 bit 0x12345678 est 0x78563412 lorsqu'on la considère comme un nombre 32 bits.
Cœurs ARM armv5 et plus (ARM7, ARM9, etc) ont une endian mode connu comme ÊTRE-32, sens big endian mot invariable. armv6 et plus récent (mpcore, cortex-somethings) ont BE-8, ou big endian octet invariant.
Donc, si vous utilisez un armv4 par exemple en big endian et en mode natif (peu) endian mode un mot lu (ldr) de la valeur 0x12345678 serait 0x12345678 pour un big endian mot lu à la même adresse. Le mot de l'invariant de sens du mot lit donner la même réponse. Un octet de lecture de l'adresse zéro en little endian mode de la même adresse serait 0x78 et big endian octet lu (ldrb) serait 0x12.
De sorte que vous avez à aller au-delà en disant: est-il grand ou petit-boutiste, mais ce que l'instruction est utilisé.
Pour un armv6 ou plus récent, si un ldr à certaines adresses résultats dans 0x12345678 puis en big endian mode de la ldr à partir de la même adresse entraînerait 0x78563412. Noter que big ou little endian mode une instruction fetch pour cette adresse, sur un armv6 ou plus récent allait chercher 0x12345678. Un ldrb little endian mode armv6 mêmes données même adresse de résultats dans 0x78, ldrb big endian armv6 ou plus récent aussi des résultats dans 0x78. c'est parce que le armv6 et plus récent octet de l'invariant de signification octet accède à la même adresse, résultat de la même valeur, halfword, la parole et le mot double accès sont échangé sur ces architectures quand en big endian mode. Parce que l'instruction extractions ne sont pas échangés, et parce que le endian peu est dans le cadre du rp, tout en exécutant un petit-boutiste du programme compilé, vous pouvez passer à big endian, faire un certain nombre d'instructions, puis retour en mode natif et il l'habitude de nuire à l'instruction extrait, ni des interruptions qui se produisent.
Certaines pages du site web de mentionner quatre instruction byte swap, dans le cas où vous souhaitez exécuter natif little endian (une très bonne idée) et d'effectuer le swap à l'aide de l'assembleur (pas toujours une bonne idée, dépend de ce que vous faites).
avec r1 étant l'entrée, il apparaît et r0 étant la sortie
Pour armv6, ou plus récente, le ci-dessus peut être réalisée avec
OriginalL'auteur old_timer
Voir si il y a un octet d'inversion de commande c'est à dire (__REV(), __REV16(), __REVSH()). Ces sont en ligne instructions de montage qui utilise le matériel à la différence de la plus lente, mais portable contourner les réponses ci-dessus. (link1, link2)
OriginalL'auteur nimig18
Pensez à comment vous convertir boutisme dans un langage de haut niveau comme le C, et puis quand vous comprenez que vous pouvez facilement traduire dans les BRAS de montage, par exemple
Donc pour la 16 bits de cas, vous avez deux quarts de travail (un à gauche et un à droite) et un OU. Vous devriez être capable de le faire en 3 instructions.
OriginalL'auteur Paul R