Расчет адреса ветвления на MIPS - PullRequest
0 голосов
/ 13 марта 2012

Я не понимаю, как вычисляется адрес ветвления в MIPS.

Вот большая картина того, что происходит с программным счетчиком (ПК): PC = PC + 4 + ((signed-extended offset)<<2)

Я вижу причину, по которой число смещений signed-extended перед добавлением к PC, это просто 16-битное значение, которое нужно превратить в 32-битное значение, но зачем нам left double shift со знаком расширенный номер ??? (Также <<2 означает, что мы умножаем число на 4)

Пока мы на эту тему, я расширю вопрос: Когда мы смещаемся от непосредственного значения (регистра), почему мы не делаем <<2?

Спасибо!

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Важно знать, что инструкции выровнены на четыре байта . Таким образом, два младших значащих бита адреса не нужно хранить, и это позволяет 16-разрядному смещению давать диапазон 2 ^ 18 байт.

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

1 голос
/ 13 марта 2012

Адрес должен быть кратным четырем, поэтому, делая умножение на четыре автоматически, это оставляет более значимые биты для фактического использования. (Другими словами, у вас действительно есть 18 битов в пути.)

...