2015-04-15 1 views
0

Мне нужно реализовать инструкцию в сборке MIPS, которая перескакивает на место, хранящееся в регистре, если его значение неотрицательно; в противном случае он переходит в местоположение, хранящееся во втором регистре.Как я могу реализовать определенную инструкцию в MIPS?

У меня возникла проблема с тем, как проверить отрицательные значения в регистрах, а также нужна помощь в понимании того, как это реализовать.

ответ

0

Предположим, что вы имеете в $t1 тестовый регистр (один, указывающий на адрес, чтобы перейти, если его содержание не является отрицательным), а в $t2 регистр, который будет содержать адрес скачка, если $t1 отрицательный.

Затем этот фрагмент должен сделать трюк:

bge $t1, $zero, is_positive 
    jr $t2 
is_positive: 
    jr $t1 

Первые ветви инструкции к is_positive если $t0 неотрицательна. Инструкция на этой метке переходит к адресу, указанному $t1. Если ветвь не занята (то есть $t 0 отрицательна), то выполняется следующая инструкция, которая будет переходить на адрес, заданный $t2.

+0

Мне нужно реализовать его как одну инструкцию – zeta

+1

В MIPS ISA нет инструкции, которая делает то, что вы хотите. Вы можете эмулировать его, например, с помощью фрагмента, указанного в ответе. – gusbro