2010-04-15 3 views
2

Je pense à cette question pour un temps: quand est-ce qu'un processeur ARM7 (avec 3 pipelines) augmente son registre de PC.Quand un processeur ARM7 augmente-t-il son registre PC?

Je pensais initialement qu'après l'exécution d'une instruction, le processeur vérifie d'abord s'il y a une exception dans la dernière exécution, puis augmente PC de 2 ou 4 en fonction de l'état actuel. Si une exception se produit, ARM7 changera son mode de fonctionnement, stockera le PC dans le LR du mode actuel et commencera à traiter l'exception actuelle sans modifier le registre du PC.

Mais cela n'a aucun sens lors de l'analyse des instructions de retour. Je ne peux pas déterminer pourquoi PC sera assigné LR en revenant d'une exception d'instruction non définie alors que LR-4 de prefetch-abort-exception, ces deux exceptions ne se sont pas produites à l'état de décodage? De plus, selon mon manuel, PC sera toujours assigné LR-4 en revenant de prefetch-abort-exception quel que soit l'état du processeur (ARM ou Thumb) avant que l'exception ne se produise. Cependant, je pense que PC devrait être assigné LR-2 si l'état original est Thumb, car une instruction Thumb est longue de 2 octets au lieu de 4 octets qu'une instruction ARM contient, et nous voulons simplement annuler une instruction dans l'état actuel . Y at-il des défauts dans mon raisonnement ou quelque chose de mal avec le manuel.

Cela semble une longue question. J'espère vraiment que n'importe qui peut m'aider à obtenir la bonne réponse.

Merci d'avance.

Répondre

2

Vous revenez à LR à partir de la gestion des instructions non définies car cela pointe vers l'instruction après celle qui a provoqué l'interruption; vous ne voulez pas revenir à la même instruction indéfinie, cela ne fera que toucher le même piège.

Vous retournez à LR-4 à partir de prefetch-abort si vous voulez exécuter à nouveau la même instruction; sans doute parce que vous avez mappé de la mémoire pour que cela fonctionne maintenant.

À quel moment dans la canalisation un ARM7 fait augmente son PC est hors de propos, parce que la valeur du PC lors de l'exécution et par conséquent la valeur de LR dans les gestionnaires Abandonner est quelque chose prévu dans le cadre de la norme de l'architecture ARM, basée largement sur ce que l'ancien ARM2 a fait avec son PC.

Cependant, je pense que PC doit être attribué LR-2 si l'état d'origine est Thumb

Ce serait logique, mais le gestionnaire d'exception aurait besoin de savoir si le code original qui a causé pour déclencher était le code ARM ou Thumb. Cela a peut-être également eu une incidence sur la compatibilité, car il y avait beaucoup de code de gestion des exceptions non compatible avec Thumb. Donc à la place, l'architecture Thumb a truqué le LR à l'entrée des gestionnaires d'exceptions afin que le gestionnaire puisse toujours utiliser la même instruction pour retourner, celle qu'ils avaient l'habitude d'utiliser pour le code non-Thumb.

+0

Excellente réponse. –

Questions connexes