L'instruction de branchement annulée provoque l'ignorance de l'instruction dans l'intervalle de délai - l'instruction après la branche - si la branche n'est pas prise.
Pourquoi cela serait-il important? Parce que normalement, l'instruction après la branche est exécutée, même si la branche est prise. C'est parce qu'il y a deux compteurs de programme, PC et NPC. PC, qui indique l'instruction en cours d'exécution, est mis à jour vers NPC, qui est PC + 4, en même temps que NPC est en cours de mise à jour vers la cible de l'instruction de branchement. Donc, en raison de la synchronisation de ces événements, l'instruction suivante doit être chargée. Plutôt que de simplement jeter ce cycle, il est plus rentable d'utiliser ce cycle si nous le pouvons. Nous ferions alors simplement cette instruction partie de la boucle.
loop: someOp
someOtherOp
branch loop ;
delayslotOp ; will actually be executed, before someOp, after branch
Si nous ne pouvons pas utiliser la fente d'instruction après la branche, nous coller un nop là-dedans, et ne rien faire de ce cycle.
Alors pourquoi avoir des instructions différentes avec les options de branches annulées et non annulées? Pour nous donner le choix de ce qui se passe en sortie de la boucle. Si nous avons fait de la partie de délai de l'activité de boucle, nous ne voulons pas que cette opération soit exécutée en quittant la boucle. Par conséquent, nous ajouterions ", a" à la fin de l'instruction de branchement.
This page has some nice examples.