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

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

.pdf
Скачиваний:
12
Добавлен:
07.06.2023
Размер:
723.7 Кб
Скачать

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

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