Кодировка инструкции MIPS Jump: почему сдвиг влево и почему сохраняются старшие 4 бита P C? - PullRequest
0 голосов
/ 06 апреля 2020

В инструкции перехода:

  1. почему мы смещаем 26-битный адрес в 28-битный?
  2. почему мы добавляем самый левый 4- бит от P C до 28-битного?

1 Ответ

2 голосов
/ 07 апреля 2020

Почему мы смещаем 26-битный адрес в 28-битный?

Когда мы смещаем адрес на 2 бита, аргумент (адрес) инструкции перехода может быть в диапазон 0 ... 2 ^ 28-1.

Если мы не сместим адрес, он может быть только в диапазоне 0 ... 2 ^ 26-1.

Это означает, что мы могли бы использовать только 1/4 адресного пространства.

С другой стороны, дополнительное преимущество не смещения адреса не будет на самом деле преимуществом:

Не смещение адреса будет разрешить использование адресов, которые не делятся на 4. Однако, поскольку инструкции всегда расположены по адресам, которые делятся на 4, инструкция перехода на адрес, не делимый на 4, не имеет смысла.

Кстати: Другое Процессоры (например, MC68000) действительно используют 16-битные инструкции «перехода» (перехода), где младший бит всегда должен быть равен нулю, и, следовательно, больший объем памяти может быть адресован, если процессор сместит адрес на единицу.

почему мы добавляем самый левый 4-битный из P C к 28 -bit?

Регистр P C имеет ширину 32 бита, а инструкция перехода содержит только 26 бит. Таким образом, мы должны взять 6 бит из другого места:

Младшие 2 бита регистра P C всегда равны нулю, поэтому нам все еще нужно думать о «левых» 4 битах.

Если бы мы всегда устанавливали левые 4 бита в ноль, мы могли бы перейти только к некоторому коду, расположенному в первых 256 мегабайтах памяти.

Если мы просто не изменим левые 4 бита P C, мы можем перейти к некоторому коду, который находится в том же диапазоне 256 Мегабайт, что и сама инструкция перехода.

Давайте подумаем о for() или while() l oop:

В конце всего этого oop есть инструкция перехода к началу l oop.

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

Что более вероятно:

То, что начало l oop находится в том же диапазоне 256 мегабайт, что и конец l oop (инструкция перехода) или что начало l oop находится внутри первых 256 мегабайт памяти?

...