В таблице 1 показаны инструкции для передачи управления.
Таблица 1. Команды передачи управления.
Условное ветвление |
|||||||||
Название |
Синтаксис инструкции |
Значение |
Формат/ код/ функция |
Примечание |
|||||
Branch on equal |
beq $s, $t, C |
f ($s == $t) go to PC+4+4*C |
I |
416 |
- |
Переходит к инструкции по указанному адресу, если два регистра равны.. |
|||
Branch on not equal |
bne $s,$t,C |
if ($s != $t) go to PC+4+4*C |
I |
516 |
- |
Переходит к инструкции по указанному адресу, если два регистра не равны. |
|||
Безусловный переход |
|||||||||
Jump |
j C |
PC = PC+4[31:28] . C*4 |
J |
216 |
- |
Выполняет безусловный переход к инструкции по указанному адресу. |
|||
Jump register |
jr $s |
goto address $s |
R |
016 |
816 |
Переходит по адресу, содержащемуся в указанном регистре. |
|||
Jump and link |
jal C |
$31 = PC + 8; PC = PC+4[31:28] . C*4 |
J |
316 |
- |
Как процедура — применяется для вызова подпрограммы, регистр $31 получает и возвращает адрес; возврат из подпрограммы совершает jr $31. Адресом возврата будет PC + 8, а не PC + 4, в связи с использованием слота задержки перехода (delay slot): любая команда перехода в архитектуре (до введения новых инструкций MIPS32/MIPS64 в 2014-ом) всегда предваряется выполнением следующей за ней команды, а уже потом собственно переходом. Это позволяло более равномерно нагрузить конвейер — пока команда перехода извлекала инструкцию по адресу перехода процессор не простаивал, а исполнял следующую за ней команду, что, однако, влечет сложность чтения и правильного понимания ассемблерного кода и требует учета компиляторами. |