Рассмотрим эту инструкцию I-типа (BNE, переход на неравно): 0001 0100 1010 1001 1111 1111 1110 1111. Когда выполняется условие NE, как изменится значение PC, т. е. PC = PC + _____?
Ответ на вопрос -68, но я не совсем уверен, почему. Я знаю, что для инструкции I-типа последние 16 бит, если смещение, разница со знаком между исходным пунктом назначения и местом, где вы разветвляетесь, тоже. Итак, все единицы указывают на отрицательное значение? Но я до сих пор не понимаю, как было получено значение 68.
Непосредственная часть инструкции
1111 1111 1110 1111
что равно -17. Это связано с кодированием дополнения до двух, и можно легко убедиться, что, добавляя 17 к этому числу, мы получаем 2 ^ 16 (то есть ноль, если мы оставляем только 16 первых битов).
Инструкция MIPS имеет размер 32 бита (4 байта), и они выровнены, т. е. их адрес всегда кратен 4. Архитектура MIPS использует эту характеристику для увеличения диапазона перехода, и, поскольку PC всегда кратен 4, смещение перехода будет умножено на 4 до того, как была добавлена на ПК. Это позволяет хранить в 4 раза большие смещения.
Итак, к PC будет добавлено значение 0 4*(-17), то есть -68.
Чтобы быть точным, официальная документация MIPS утверждает, что
An 18-bit signed offset (the 16-bit offset field shifted left 2 bits) is added to the address of the instruction following the branch (not the branch itself), in the branch delay slot, to form a PC-relative effective target address.
Эквивалентная формулировка заключается в том, что это значение -68 будет добавлено к PC после того, как оно было увеличено на 4 на этапе получить инструкцию.