2016-03-10 2 views
1

Мне нужно преобразовать этот переход в двоичный файл, и я не могу понять, как получить немедленное значение. Я попытался сделать это, взяв базовый адрес Loop, который предположил, что он равен 40000, затем разделите его на 4 (40000/4 = 10000), но я не знаю, правильно ли это (именно так они сделали это в пример в моей книге).MIPS Как преобразовать инструкцию j в машинный код?

Loop: slt $t0,$s0,$s1 
      beq $t0,1,Exit 
      sub $s0,$s0,$s1; 
      j Loop; 
    Exit: 

ответ

1

Биты 25..0 из j команд становятся битами 27..2 из PC и бит 1..0 стало 00 (это деление на 4 бизнесе). Это работает, потому что адреса всегда выравниваются по 4 байт.

Таким образом, если Loop находится по адресу 40 000, то нижние 26 бит инструкции являются 00 0000 0000 0010 0111 0001 0000 (10000), а остальные 6 бит являются кодом операции j (0000 10).

Когда команда исполняет значение (10000 в вашем случае), извлекается и сдвигается влево на 2 бита (что умножается на 4). Затем это значение заменяет нижние 28 бит ПК - верхние 4 бита (0000 в вашем случае) остаются неизменными. Следующая инструкция, выполняемая вашей программой, будет иметь адрес 40 000.

Смежные вопросы