Аннулированная инструкция ветвления приводит к тому, что инструкция в интервале задержки - инструкция после ветвления - игнорируется, если ветвь не берется.
Почему это важно? Потому что обычно инструкция после ветвления выполняется, даже если ветвь берется. Это потому, что есть два счетчика программ, ПК и NPC. ПК, который указывает на выполняемую инструкцию, обновляется до NPC, который представляет собой ПК + 4, в то же время, когда NPC обновляется до цели инструкции ветвления. Поэтому из-за времени этих событий должна быть загружена следующая инструкция. Вместо того, чтобы просто выбросить этот цикл, выгоднее использовать этот цикл, если мы можем. Затем мы просто сделаем эту инструкцию частью цикла.
loop: someOp
someOtherOp
branch loop ;
delayslotOp ; will actually be executed, before someOp, after branch
Если мы не можем использовать слот инструкций после ветки, то мы вставляем nop туда и ничего не делаем в этом цикле.
Так почему же тогда есть разные инструкции с аннулированными и не аннулированными вариантами ветвления? Чтобы дать нам выбор того, что происходит при выходе из цикла. Если мы сделали интервал задержки частью активности цикла, мы можем не захотеть, чтобы эта операция выполнялась после выхода из цикла. Поэтому мы добавили бы «, а» в конец инструкции перехода.
На этой странице есть несколько хороших примеров.