2010-11-30 30 views
0

Je n'ai pas trouvé de réponse à cette question. Pouvez-vous me dire quand l'architecture ARM passe du mode bras au mode pouce? Expliquer toutes les façons dont la commutation fonctionne.Toutes les façons de passer du mode bras au mode pouce dans l'architecture ARM les listent et expliquent en détail?

+0

Pourquoi avez-vous besoin de savoir? –

+4

Est-ce que ce sont les devoirs? En outre, dans les deux lignes que vous avez écrites, il y a environ 15 erreurs orthographiques et grammaticales. Si vous attendez des gens ici pour "expliquer en détail", au moins mis en avant un petit effort. – Dan

+0

Ça aurait pu être une question de devoirs. Mais une question intéressante néanmoins. – viv

Répondre

8

Les réponses se trouvent dans ARM ARM (ARM Architectural Reference Manual). Regardez BX à la fois dans les instructions ARM et les instructions Thumb, par exemple. Il y a plus d'instructions au cas où c'est une question de devoirs.

Regardez aussi le code de pseudo pour ce qui se passe lorsqu'une exception se produit:

 
R14_ = return link 
SPSR_ = CPSR 
CPSR[4:0] = exception mode number 
CPSR[5] = 0 
if == Reset or FIQ then 
    CPSR[6] = 1 
CPSR[7] = 1 
if != UNDEF or SWI then 
    CPSR[8] = 1 
CPSR[9] = CP15_reg1_EEbit 
PC = exception vector address 

Les commentaires pour le pseudo-code ci-dessus (dans le bras ARM) décrivent une autre réponse à votre question.

Maintenant, ce qui n'est pas évident, et peut-être trompeur dans les descriptions d'instructions BX et autres est que bx rm ne change pas toujours d'état. La description du pouce BX indique "branches entre le code ARM et le code du pouce". Comme si le pouce l'utilisant vous amènerait à armer le code tout le temps. Le pseudo code peint une image un peu meilleure cependant, l'adresse de l'adresse dans le registre vous indique si vous vous branchez sur le pouce ou le bras. Le pseudo code PC dans la description du pouce est cependant trompeur. Les instructions Thumb sont 16 bits et le pc avance 16 bits à la fois 0x00, 0x02, 0x04, etc. En mode arm, les instructions sont 32 bits et le pc va 0x00, 0x04, 0x08, etc. (regardez les instructions de branchement ARM la branche est signed_immed < < 2, 0,4,8, etc. branche pouce est signed_immed < < 1, 0,2,4,6, etc.)

Fondamentalement, si vous avez un programme en mode mixte que vous souhaitez utiliser BX au lieu de B, en particulier lors du retour de bx lr au lieu de mov pc, lr. Donc les fonctions du pouce et du bras utiliseraient bx lr pour retourner. Les quatre cas sont couverts, le bras qui appelle le bras, le pouce qui appelle le bras, le bras qui appelle le pouce et le pouce qui appelle le pouce. Donc, cherchez des instructions qui affectent le bit T du cpsr et/ou affectent le compteur de programme d'une manière qui amène le compteur de programme à se brancher quelque part. Veillez également à vous limiter à la famille ou au noyau spécifique qui vous intéresse (lors de la lecture du bras ARM), armv4t, armv6, armv6, etc. Vous voudrez probablement obtenir le TRM (Technical Reference Manual) pour le noyau spécifique que vous êtes en utilisant aussi bien. Le ARM ARM est très générique et, à mesure que le nombre de cœurs augmente avec le temps, les différences spécifiques ne sont pas claires dans le ARM ARM. Vous avez besoin du TRM.

J'ai beaucoup de révolutions du ARM ARM et tous contiennent des bugs/erreurs. Intentionnel ou non, je ne sais pas, donc un peu de piratage est toujours nécessaire pour savoir comment le noyau que vous utilisez fonctionne vraiment.

+2

J'aurais pu écrire cette réponse mieux, je l'ai fait trop difficile à lire. Quoi qu'il en soit, réponse courte: recherchez les instructions qui affectent le bit T dans le CPSR. –