MIPS - Как найти значение адреса инструкции перехода и перехода

У меня готовится экзамен, и я полностью застрял в этом вопросе (см. Ниже); даже глядя на модель ответ не помог. Я пытался прочитать наш основной текст по теме, но до сих пор не знаю, как это сделать. Если бы кто-нибудь мог обеспечить пошаговое рассмотрение вопроса, я был бы очень благодарен.

"Предполагая, что первая инструкция из фрагмента MIPS ниже расположена по адресу памяти 0x10001000. Какое значение для else и выхода в инструкции bne и j?"

1   0x10001000:   addi $s0, $0, 5
2   0x10001004:   sub $s2, $0, $s1
3   0x10001008:   beq $s0, $s2, else
4   0x1000100C:   add $s0, $0, $0
5   0x10001010:   add $t0, $s2, $s0
6   0x10001014:   j exit
7   0x10001018:   else: addi $s1, $s0, -1
8   0x1000101C:   exit:

Модель Ответ:

Else: 0000000000000011 Exit: 00000000000000010000000111

Я также включил ссылку на изображение оригинального вопроса. http://i.imgur.com/NgHpZXs.png

1 ответ

Решение

Сначала разберемся с веткой. Филиалы являются I-Type инструкция, поэтому цель ветвления закодирована в 16 биты. Самый простой способ выяснить непосредственное поле ветви - это подсчитать количество инструкций между инструкцией ветви и ее целью. В этом случае else ярлык 4 инструкции после beq, Тем не менее PC увеличивается на 4 на этапе извлечения инструкций, поэтому фактическое непосредственное поле будет фактически 3, Конечно, в двоичном коде это соответствует образцу 0000000000000011,

Далее прыжок J-Type инструкция, которая кодирует цель прыжка, используя первый 24 биты его адреса. Однако, поскольку цель перехода должна быть выровнена по слову, последние два бита всегда будут 0 делая их ненужными. Таким образом, поле прыжка j инструкция соответствует образцу ответа: 0x1000101C >> 2 = 0x4000407 = 00000000000000010000000111

Другие вопросы по тегам