Как следующая инструкция I-Type меняет счетчик программы? - PullRequest
0 голосов
/ 08 апреля 2019

Рассмотрим эту инструкцию I-типа (BNE, разветвление не равно): 0001 0100 1010 1001 1111 1111 1110 1111. Когда выполняется условие NE, каково изменение значения ПК, т. Е. ПК = ПК + _____?

Ответ на вопрос -68, но я не совсем уверен, почему.Я знаю, что для инструкции I-типа последние 16 битов, если смещение, разность со знаком между местом назначения источника и местом, где вы также разветвляетесь.Таким образом, все 1 указывают отрицательное значение?Но я до сих пор не понимаю, как было получено значение 68.

1 Ответ

0 голосов
/ 08 апреля 2019

Непосредственной частью инструкции является

1111 1111 1110 1111

, что равно -17.Это связано с кодировкой дополнения до двух, и можно легко проверить, что, добавив 17 к этому числу, мы получим 2 ^ 16 (то есть ноль, если оставить только первые 16 бит).

Инструкция MIPS - 32 бита(4 байта), и они выровнены, т.е. их адрес всегда кратен 4. Архитектура MIPS использует эту характеристику для увеличения диапазона ветвлений, и, поскольку ПК всегда кратен 4, смещение ветвлений будет умножено на 4, прежде чем будет добавлено кПК.Это позволяет хранить в 4 раза большие смещения.

Итак, на ПК будет добавлено значение 0 4 * (- 17), то есть -68.

Точнее, Официальная документация MIPS гласит, что

18-битное смещение со знаком (16-битное поле смещения смещено влево на 2 бита) добавляется к адресу инструкции, следующей за ветвью (а не ветвью)само по себе), в слоте задержки перехода, чтобы сформировать эффективный целевой адрес относительно ПК.

Эквивалентная формулировка состоит в том, что это значение -68 будет добавлено к ПК после того, как оно будет увеличено на4 в инструкции извлечения этап.

...