1 курс 1 семестр / лекции / Лекция 3 Инструкц ариф лог перех
.pdfБезусловные переходы.
Для безусловных переходов программа может использовать инструкции трёх типов: обычный безусловный переход (j, от англ.jump), безусловный переход по регистру (jr, от англ. jump register) и безусловный переход с возвратом (jal, от англ. jump and link).
Безусловный переход (j) осуществляет переход к инструкции по указанной метке.
Безусловный переход по регистру (jr) осуществляет переход к инструкции, адрес которой хранится в одном из регистров процессора.
Безусловный переход с возвратом (jal) похож на j, но дополнительно сохраняет адрес возврата и используется им при вызове функций.
Пример безусловного перехода с использованием инструкции j
По окончании выполнения инструкции j target в примере кода программа продолжит исполнение с инструкции add, расположенной непосредственно за меткой target. Ни одна инструкция между j и меткой не будет выполнена.
Инструкции безусловного перехода по регистру (jr).
В этом типе перехода адреса инструкции jr указаны слева от каждого из них.
Инструкция jr $s0 имеет адрес 0х00002004 и осуществляет переход по адресу 0x00002010, взятому из регистра $s0.
Два оператора по адресам 0х00002008 и 0х00002000 не выполняются. После выполнения инструкции Jr следующий оператор выполняется по
адресу 0x00002010
Инструкции безусловного перехода с возвратом (jal).
возврат
Код на языке ассемблера MIPS
0x00400200 main: jal simple |
# call function - вызов функции |
|
0x00400204 … |
переход |
# $ra, $0, 00400204 |
0x00401020 simple: |
|
|
|
|
|
function………. |
|
|
jr $ra |
# return - возврат |
Инструкция jal выполняет переход на метку simple и сохраняет
значение адреса следующей за ней инструкции в регистре адреса возврата ($ra) 0x00400204
После этого, выполнив требуемый участок программы function, она возвращается на выполнение программы с сохраненного в $ra адреса (0x00400204) и далее выполняет программу с этого адреса .