Наличие управляющего параметра после команды перехода (DB) показывает, что выполняется переход с задержкой. В этом случае процессор продолжает выполнять еще две инструкции, пока инструкция по адресу перехода выбирается и декодируется; в случае вызова подпрограммы адрес возврата является третьим после инструкции перехода (рис. 4.2).
Время | ||||
PC | n | n+1 | N+2 | j |
DADDR | n+1 | n+2 | j | j+1 |
FADDR | n+2 | j | J+1 | j+2 |
команда CALL на адрес i | в стек ПС проталкивается (n+3) |
Рис.4.2. Выполнение инструкции задержанного перехода
Если же выполняется переход без задержки (отсутствует параметр (DB) после команды перехода), то две инструкции после инструкции перехода, которые находятся на стадии декодирования и выборки, не выполняются; для вызова подпрограммы адрес возврата является адресом следующей после команды перехода инструкции (рис. 4.3).
Время | ||||
PC | n | n+1 -> NOP | n+2 -> NOP | j |
DADDR | n+1 -> NOP | n+2 -> NOP | J | j+1 |
FADDR | n+2 | j | j+1 | j+2 |
команда CALL на адрес i | Для CALL в стек ПС проталкивается (n+1) |
Рис. 4.3. Выполнение инструкции незадержанного перехода (серым цветом показаны циклы "потерь времени")
|
|
Из-за конвейеризации инструкций инструкция задержанного перехода и следующие за ней две инструкции должны выполняться последовательно. Поэтому инструкциями, непосредственно следующими за инструкцией задерживаемого перехода, не могут быть:
- другие команды переходов или возвратов (JUMP, CALL, RTS, RTI);
- команды записи и чтения из стека ПС (PUSH и POP);
- команды записи в стек ПС или изменения указателя стека ПС;
- инструкция цикла DO…UNTIL;
- инструкция IDLE.
Любое прерывание, происшедшее во время выполнения задерживаемого перехода, защелкивается, но не обрабатывается, пока не завершится переход.