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