Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1 курс 1 семестр / лекции / Лекция 3 Инструкц ариф лог перех

.pdf
Скачиваний:
26
Добавлен:
27.12.2022
Размер:
695.3 Кб
Скачать

Безусловные переходы.

Для безусловных переходов программа может использовать инструкции трёх типов: обычный безусловный переход (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) и далее выполняет программу с этого адреса .