1 курс 2 семестр / лекции / Лекция 3 Инструкц ариф лог перех — копия
.pdfБезусловные переходы.
Для безусловных переходов программа может использовать инструкции трёх типов: обычный безусловный переход j ( от англ.jump), безусловный переход по регистру jr, (от англ. jump register) и безусловный переход с возвратом jal, (от англ. jump and link).
Безусловный переход j осуществляет переход к инструкции по указанной метке.
Безусловный переход по регистру jr осуществляет переход к инструкции, адрес которой хранится в одном из регистров процессора.
Безусловный переход с возвратом jal похож на j, но дополнительно сохраняет адрес возврата и используется им при вызове функций.
Пример безусловного перехода с использованием инструкции j
По инструкции j программа продолжит исполнение с метки target, т.е. с инструкции add, расположенной непосредственно за меткой target. Ни одна инструкция между j и меткой target не будет выполнена.
Инструкции безусловного перехода по регистру jr.
В этом типе перехода адреса всех инструкций и jr указаны слева от каждой из них.
Инструкция jr $s0 имеет адрес 0х00002004 и осуществляет переход по адресу 0x00002010, взятому из регистра $s0.
0000200С subi
Два оператора по адресам 0х00002008 и 0х0000200С не выполняются. После выполнения инструкции 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) и далее выполняет программу с этого адреса .